題目
編寫乙個程式,找到兩個單鏈表相交的起始節點。
如下面的兩個鍊錶:
在節點 c1 開始相交。
示例 1:
輸入:intersectval = 8, lista = [4,1,8,4,5], listb = [5,0,1,8,4,5], skipa = 2, skipb = 3示例 2:輸出:reference of the node with value = 8
輸入解釋:相交節點的值為
8 (注意,如果兩個列表相交則不能為 0)。從各自的表頭開始算起,鍊錶 a 為 [4,1,8,4,5],鍊錶 b 為 [5 ,0,1,8,4,5]。在 a 中,相交節點前有 2 個節點;在 b 中,相交節點前有 3
個節點。
輸入:intersectval = 2, lista = [0,9,1,2,4], listb = [3,2,4], skipa = 3, skipb = 1示例 3:輸出:reference of the node with value = 2
輸入解釋:相交節點的值為
2 (注意,如果兩個列表相交則不能為 0)。從各自的表頭開始算起,鍊錶 a 為 [0,9,1,2,4],鍊錶 b 為 [3 ,2,4]。在 a 中,相交節點前有 3 個節點;在 b 中,相交節點前有 1 個節點。
輸入:intersectval = 0, lista = [2,6,4], listb = [1,5], skipa = 3, skipb = 2思想我們需要做的事情是,讓兩個鍊錶從同距離末尾同等距離的位置開始遍歷。這個位置只能是較短鍊錶的頭結點位置。輸出:
null
輸入解釋:從各自的表頭開始算起,鍊錶 a 為 [
2,6,4],鍊錶 b 為 [1,5]。由於這兩個鍊錶不相交,所以 intersectval 必須為 0
,而 skipa 和 skipb 可以是任意值。解釋:這兩個鍊錶不相交,因此返回
null。
為此,我們必須消除兩個鍊錶的長度差
指標 pa 指向 a 鍊錶,指標 pb 指向 b 鍊錶,依次往後遍歷
如果 pa 到了末尾,則 pa = headb 繼續遍歷
如果 pb 到了末尾,則 pb = heada 繼續遍歷
比較長的鍊錶指標指向較短鍊錶head時,長度差就消除了
如此,只需要將最短鍊錶遍歷兩次即可找到位置
聽著可能有點繞,看圖最直觀,鍊錶的題目最適合看圖了
**
public結果listnode getintersectionnode(listnode heada, listnode headb)
return
pa;}
LeetCode 相交鍊錶
編寫乙個程式,找到兩個單鏈表相交的起始節點。例如,下面的兩個鍊錶 a a1 a2 c1 c2 c3 b b1 b2 b3在節點 c1 開始相交。注意 思路1 先使兩個鍊錶等長,然後一起遍歷兩個鍊錶 第乙個相等的即為所求的起始結點。definition for singly linked list.s...
相交鍊錶 C
問題 編寫乙個程式,找到兩個單鏈表相交的起始節點。詳見問題鏈結 注意 如果兩個鍊錶沒有交點,返回 null.在返回結果後,兩個鍊錶仍須保持原有的結構。可假定整個鍊錶結構中沒有迴圈。程式盡量滿足 o n 時間複雜度,且僅用 o 1 記憶體。思路 此方法是我在乙個大佬的部落格中看見的,供人學習並給自己保...
Leetcode 相交鍊錶
leetcode 輸入 intersectval 2,lista 0,9,1,2,4 listb 3,2,4 skipa 3,skipb 1 輸出 reference of the node with value 2 輸入解釋 相交節點的值為 2 注意,如果兩個列表相交則不能為 0 從各自的表頭開始...