判斷兩個單鏈表是否相交

2021-09-24 22:29:15 字數 1114 閱讀 7001

判斷兩個單鏈表是否相交

單鏈表中的每乙個結點包括乙個資料域和乙個指標域,那麼如果兩個單鏈表相交,即兩個鍊錶呈現y形狀。

那麼怎麼怎來實現這個演算法呢???

typedef int elemtype;

typedef struct _node

lnode, *linklist;

想到第乙個方法,那就是定義兩個指標,內嵌迴圈,然後從頭到尾遍歷,具體實現如下:

static linklist chaintablecross_1(linklist list1,linklist list2)

linklist p = list1->next;

while(p)

p=p->next;

} return null;

這麼實現的話我們的時間複雜度就是m*n,即o(n²);

那麼,對於這個時間複雜度,我們肯定是不能滿意的。

那麼接下來就是第二種方法:

如果兩個單鏈表交叉的話,那麼他們兩的尾結點是在一塊的都指向空(根據鍊錶的指標域,交叉後兩鍊錶的結點是都相同的);

還是定義兩個指標,如果讓第乙個指標(長鍊表的那個指標)先跑x個單位(x:長的那個鍊錶的長度減去短的鍊錶的長度),然後兩個指標一起跑,兩個指標會一起跑到空。那麼最後程序結束時它的時間複雜度就是o(n),就達到了我們目的。

那麼我們需要解決的就求到兩個鍊錶的長度,這個對於大家就很簡單了。

static int getlength(linklist list)

return count;

}

那麼方法二的具體實現如下:

static linklist chain table cross_2(linklist list1,linklist list2)

} else }

while(p!=null) }

return null;

}

判斷兩個單鏈表是否相交

首先要搞清楚單鏈表相交的概念和特點 指的是他們存在完全重合的部分,不是交叉到乙個點 不存在這種情況,可以想想為什麼 判斷其是否相交的方法有以下幾種。1 最傳統方法 雙重迴圈,依次查詢,是否有位址相同的節點,時間複雜度o list1.len list2.len 空間複雜度o 1 2 hash法 先遍歷...

判斷兩個單鏈表是否相交

方法一 直接法 直接判斷第乙個鍊錶的每個結點是否在第二個鍊錶中,時間複雜度為o len1 len2 耗時很大 方法二 利用計數 如 果 兩個鍊錶相交,則兩個鍊錶就會有共同的結點 而結點位址又是結點唯一標識。因而判斷兩個鍊錶中是否存在位址一致的節點,就可以知道是否相交了。可以對第一 個鍊錶的節點位址進...

判斷兩個單鏈表是否相交

判斷兩個單鏈表是否相交,如果相交,給出相交的第乙個點 兩個鍊錶都不存在環 比較好的方法有兩個 一 將其中乙個鍊錶首尾相連,檢測另外乙個鍊錶是否存在環,如果存在,則兩個鍊錶相交,而檢測出來的依賴環入口即為相交的第乙個點。二 如果兩個鍊錶相交,那個兩個鍊錶從相交點到鍊錶結束都是相同的節點,我們可以先遍歷...