判斷兩個鍊錶是否相交並找出交點 筆記

2021-07-11 04:01:07 字數 975 閱讀 9658

本文內容並非全部為原創,新增個人想法僅做筆記之用。

判斷兩個鍊錶是否相交的方法

相交鍊錶的特徵:如果兩個鍊錶相交,那麼交點以後的節點都相同,否則不相交。

這個地球人都懂得

兩個鍊錶的節點進行hash,然後判斷節點hash值和節點的值是否相等來判斷。乙個鍊錶的尾部連線下乙個鍊錶的頭部,通過判斷新鍊錶是否有環

這個想法另類,但易於實現,可以參考單鏈表存在環的問題

由相交鍊錶的特徵可知,每個鍊錶都遍歷到最後乙個節點,如果最後乙個節點相同,則鍊錶相交,否則不相交。乙個鍊錶的長度len1,另乙個鍊錶的長度len2,那麼兩個鍊錶只差為|len1-len2|,兩個鍊錶的中較長鍊錶在遍歷|len1-len2|與較短鍊錶同時遍歷,就能找到交點。

為什麼判斷最後乙個節點?

因為最後乙個節點是確定的,而且只需遍歷鍊錶即可。

node * findintersection(node* header1, node* header2) 

while (p2->next !=

null)

int dif = abs(len1, len2);

int len =

0; if (len1 >= len2)

if (len2 > len1)

while (p1->next !=

null

&& dif >

0) // 同時遍歷,注意:這裡直接判斷p1 和 p2是否相等,是因為較短鍊錶的頭結點可能就是交點

while (p1 != p2)

return p1;

}

判斷兩個鍊錶是否相交並找出交

判斷兩個鍊錶是否相交並找出交點

問題描述 乙個比較經典的問題,判斷兩個鍊錶是否相交,如果相交找出他們的交點。思路 1 碰到這個問題,第一印象是採用hash來判斷,將兩個鍊錶的節點進行hash,然後判斷出節點,這種想法當然是可以的。2 當然採用暴力的方法也是可以的,遍歷兩個鍊錶,在遍歷的過程中進行比較,看節點是否相同。3 第三種思路...

判斷兩個鍊錶是否相交並找出交點

問題描述 乙個比較經典的問題,判斷兩個鍊錶是否相交,如果相交找出他們的交點。思路 1 碰到這個問題,第一印象是採用hash來判斷,將兩個鍊錶的節點進行hash,然後判斷出節點,這種想法當然是可以的。2 當然採用暴力的方法也是可以的,遍歷兩個鍊錶,在遍歷的過程中進行比較,看節點是否相同。3 第三種思路...

如何判斷兩個鍊錶是否相交並找出交點

情況1 兩個鍊錶均不含有環 1 直接法 採用暴力的方法,遍歷兩個鍊錶,判斷第乙個鍊錶的每個結點是否在第二個鍊錶中,時間複雜度為o len1 len2 耗時很大。2 hash計數法 如 果 兩個鍊錶相交,則兩個鍊錶就會有共同的結點 而結點位址又是結點唯一標識。因而判斷兩個鍊錶中是否存在位址一致的節點,...