請寫乙個程式,找到兩個單鏈表最開始的交叉節點。
注意事項
樣例下列兩個鍊錶:
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,然後將較長的鍊...