LeetCode160 相交鍊錶

2021-09-20 15:28:03 字數 2238 閱讀 2530

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

如下面的兩個鍊錶:

在節點 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。

注意:如果兩個鍊錶沒有交點,返回 null.

在返回結果後,兩個鍊錶仍須保持原有的結構。

可假定整個鍊錶結構中沒有迴圈。

程式盡量滿足 o(n) 時間複雜度,且僅用 o(1) 記憶體。

思路:在這裡注意ab兩個鍊錶的長度是不相同的,但是如果分別以a、b為起始,連續讀取兩個鍊錶,讀取到的長度是相同的。如果在尾部有重複的部分,我們可以這樣看兩個鍊錶:a=a+c、b=b+c(前半部分不同,後半部分相同)。所以我們此時兩次讀取到的鍊錶分別是a+c+b+c以及b+c+a+c。可以發現,兩次讀取最後的部分是相同的。如果兩個鍊錶沒有重複的部分,按照上面的方式讀取完之後,下乙個值(.next)都是none,也是相同的。所以我們可以將兩個節點是否相等作為迴圈條件,如果不相等就繼續迴圈,往下讀;如果相等的話就返回當前值。此時返回值有可能是重複部分的第乙個值,也有可能是none。符合要求。

# definition for singly-linked list.

# class listnode(object):

# def __init__(self, x):

# self.val = x

# self.next = none

class solution(object):

def getintersectionnode(self, heada, headb):

""":type head1, head1: listnode

:rtype: listnode

"""cur1,cur2 = heada,headb

while cur1 != cur2:

if cur1:

#如果cur1為none,就將鍊錶b給cur1然後繼續遍歷

cur1 = cur1.next

else:

cur1 = heada

if cur2:

#如果cur2為none,就將鍊錶a給cur2然後繼續遍歷

cur2 = cur2.next

else:

cur2 = headb

return cur1

LeetCode160 相交鍊錶

編寫乙個程式,找到兩個單鏈表相交的起始節點。例如,下面的兩個鍊錶 在節點 c1 開始相交。注意 如果兩個鍊錶沒有交點,返回 null.在返回結果後,兩個鍊錶仍須保持原有的結構。可假定整個鍊錶結構中沒有迴圈。程式盡量滿足 o n 時間複雜度,且僅用 o 1 記憶體。解題思路 1.找到兩個鍊錶長度差n後...

Leetcode160 相交鍊錶

解法一 用乙個集合去判斷 class solution sets listnode tmp1 heada listnode tmp2 headb while tmp1 while tmp2 tmp2 tmp2 next return nullptr 解法二 先遍歷一遍兩個鍊錶得到的長度差n,然後讓長...

LeetCode 160 相交鍊錶

編寫乙個程式,找到兩個單鏈表相交的起始節點。例如,下面的兩個鍊錶 a a1 a2 c1 c2 c3 b b1 b2 b3 在節點 c1 開始相交。注意 如果兩個鍊錶沒有交點,返回 null.在返回結果後,兩個鍊錶仍須保持原有的結構。可假定整個鍊錶結構中沒有迴圈。程式盡量滿足 o n 時間複雜度,且僅...