題目:
解答:
方法一:雙指標法
(1)建立兩個指標 pa 和 pb,分別初始化為鍊錶 a 和 b 的頭結點。然後讓它們向後逐結點遍歷。
(2)當 pa到達鍊錶的尾部時,將它重定位到鍊錶 b 的頭結點 (你沒看錯,就是鍊錶 b); 類似的,當 pb 到達鍊錶的尾部時,將它重定位到鍊錶 a 的頭結點。
(3)若在某一時刻 pa 和 pb相遇,則papb 為相交結點。
(4)想弄清楚為什麼這樣可行, 可以考慮以下兩個鍊錶: a= 和 b=,相交於結點 9。 由於 b.length (=4) < a.length (=6),pb 比 pa 少經過 22 個結點,會先到達尾部。將 pb重定向到 a 的頭結點,pa重定向到 b 的頭結點後,pb要比 pa多走 2 個結點。因此,它們會同時到達交點。
如果兩個鍊錶存在相交,它們末尾的結點必然相同。因此當 papa/pbpb 到達鍊錶結尾時,記錄下鍊錶 a/b 對應的元素。若最後元素不相同,則兩個鍊錶不相交。
複雜度分析
時間複雜度 : o(m+n)o(m+n)。
空間複雜度 : o(1)o(1)。
1/**2* definition for singly-linked list.
3* struct listnode
7* };8*/
9class
solution
1819 listnode *pa =heada;
20 listnode *pb =headb;
2122
while (pa !=pb)
2327
28return
pa;29
}30 };
面試題52 兩個鍊錶的第乙個公共節點
題目描述 輸入兩個鍊錶,找出它們的第乙個公共結點。有公共節點的兩個鍊錶在公共節點匯合後,後面的節點均相同,為y型。方法一 消除長度差後,兩者到公共節點距離相同。時間複雜度o m n struct listnode class solution return len listnode findfirs...
面試題52 兩個鍊錶的第乙個公共節點
面試題52 兩個鍊錶的第乙個公共節點 題目 輸入兩個鍊錶,找出它們的第乙個公共結點 思路 首先遍歷兩個鍊錶得到它們的長度,比較長短。第二遍,在較長的鍊錶上先走若干步,接著同時在兩個鍊錶上遍歷 找到的第乙個相同的節點就是它們的第乙個公共節點 classlistnode6 publicclassno52...
面試題52 兩個鍊錶的第乙個公共節點
輸入兩個鍊錶,找出它們的第乙個公共結點。注意因為傳入資料是鍊錶,所以錯誤測試資料的提示是用其他方式 顯示的,保證傳入資料是正確的 考察點 時間空間複雜度分析 鍊錶程式設計。思路 一開始想到的是遍歷其中一條鍊錶,找到乙個節點,就去另一條鍊錶中去找相同的,這樣的複雜度比較高。所以借用前文的思路,既然是找...