相交鍊錶 鍊錶

2022-06-02 22:57:12 字數 2004 閱讀 3403

題目

編寫乙個程式,找到兩個單鏈表相交的起始節點。

如下面的兩個鍊錶:

在節點 c1 開始相交。

示例 1:

輸入:intersectval = 8, lista = [4,1,8,4,5], listb = [5,0,1,8,4,5], skipa = 2, skipb = 3

輸出: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

個節點。

示例 2:

輸入: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)。從各自的表頭開始算起,鍊錶 a 為 [0,9,1,2,4],鍊錶 b 為 [3     ,2,4]。在 a 中,相交節點前有 3 個節點;在 b 中,相交節點前有 1 個節點。

示例 3:

輸入: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 從各自的表頭開始...