兩個鍊錶的交叉

2021-08-07 10:22:04 字數 795 閱讀 3350

請寫乙個程式,找到兩個單鏈表最開始的交叉節點。

注意事項

樣例下列兩個鍊錶:

a:          a1 → a2

↘c1 → c2 → c3

b: b1 → b2 → b3

在節點 c1 開始交叉。

需滿足 o(

n) 時間複雜度,且僅用 o(

1) 記憶體。

這裡主要有兩個思路:

方法一:

對於僅判斷相交不相交的話:判斷最後乙個節點是否相同的辦法並不慢,如果兩個鍊錶長度m,n 那麼複雜度o(m+n),這是最優的複雜度

如何尋找交叉節點:指標p、q分別遍歷鍊錶a、b,假設q先到達null(即 假設a 比 b 長),此時從a的頭髮出乙個指標t,當p到達null時,從b的頭髮出s,當s==t的時候即交點.

**如下:

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

listnode *c = null;

if(!a)

while(1)

}else

while(1)}}

};

方法二:可以將乙個鍊錶的尾節點指向另乙個鍊錶的頭結點。如果交叉,那麼這就形成了環,剩下的問題就是如何判斷乙個鍊錶是否是環,同時要知道環的起始節點。

鍊錶 兩個鍊錶的交叉 中等

請寫乙個程式,找到兩個單鏈表最開始的交叉節點。您在真實的面試中是否遇到過這個題?是 下列兩個鍊錶 a a1 a2 c1 c2 c3 b b1 b2 b3在節點 c1 開始交叉。需滿足 o n 時間複雜度,且僅用 o 1 記憶體。definition for singly linked list.st...

lintcode 兩個鍊錶的交叉

請寫乙個程式,找到兩個單鏈表最開始的交叉節點。如果兩個鍊錶沒有交叉,返回null。在返回結果後,兩個鍊錶仍須保持原有的結構。可假定整個鍊錶結構中沒有迴圈。下列兩個鍊錶 a a1 a2 c1 c2 c3 b b1 b2 b3 在節點 c1 開始交叉。需滿足 o n 時間複雜度,且僅用 o 1 記憶體。...

求兩個交叉鍊錶的交點

如果兩個鍊錶相交,又都不存在環,那麼從第乙個相交點開始之後的結點都相同 構成了乙個y型 因此,只要分別遍歷這兩個鍊錶,找到末尾結點,如果末尾結點相同,即可確認相交。如果要求這種情況的交點,由於相交部分全部都相同,所以彼此的長度差異存在於相交之前的部分。因此,只需要先得到兩個鍊錶的差d,然後將較長的鍊...