語言:python
難度:簡單
描述:找到兩個單鏈表的重合鏈。比如:
node_a = [4,1,8,4,5]; node_b = [5,0,1,8,4,5],則這兩個鍊錶的起始節點為8,重合鏈為[8,4,5]。
node_a = [4,1,7,2,1]; node_b = [5,0,1,8,4,5],則這兩個鍊錶的起始節點為null,不存在。
將其中乙個node_a鍊錶的所有子鍊錶儲存到set_a中;
遍歷node_b,判斷其node.next是否存在於set_a中,如果有則直接返回node.next,否則則遍歷結束返回none。
code:
class
solution
:def
getintersectionnode
(self, heada: listnode, headb: listnode)
-> listnode:
a =set(
) cur1 = heada
cur2 = headb
while cur1:
a.add(cur1)
cur1 = cur1.
next
while cur2:
if cur2 in a:
return cur2
cur2 = cur2.
next
return
none
分別遍歷兩個鍊錶,得到兩個鍊錶的長度差距;
讓長的先做node.next,使得它們倆等長;
同時遍歷兩個鍊錶,直到子鏈相同則停止遍歷。
code:
class
solution
:def
getintersectionnode
(self, heada: listnode, headb: listnode)
-> listnode:
cur1 = heada
cur2 = headb
n =0# 1
while cur1:
n +=
1 cur1 = cur1.
next
while cur2:
n -=
1 cur2 = cur2.
next
if cur1 != cur2:
return
none
cur1 = heada if n >
0else headb
cur2 = headb if cur1 == heada else heada
n =abs(n)
# 2while n:
n -=
1 cur1 = cur1.
next
# 3while cur1 != cur2:
cur1 = cur1.
next
cur2 = cur2.
next
return cur1
return
none
同時遍歷兩個鍊錶;(假設長度分別為m,n,相交節點之後的長度為k)
當短的鍊錶到達尾節點的時候n,開始遍歷長鍊表m;
當長的鍊錶到達尾節點的時候m,開始遍歷短鍊表n;(此時兩個鍊錶的遍歷長度將相同)
繼續遍歷,直到出現相同子鏈。(n+m-k與m+n-k處相交,k=0時則為null)
class
solution
:def
getintersectionnode
(self, heada: listnode, headb: listnode)
-> listnode:
cur1 = heada
cur2 = headb
while cur1 != cur2:
cur1 = cur1.
next
if cur1 else headb
cur2 = cur2.
next
if cur2 else heada
return cur1
Leetcode(鍊錶)相交鍊錶 c
編寫乙個程式,找到兩個單鏈表相交的起始節點。例如,下面的兩個鍊錶 a a1 a2 c1 c2 c3 b b1 b2 b3 在節點 c1 開始相交。注意 如果兩個鍊錶沒有交點,返回 null.在返回結果後,兩個鍊錶仍須保持原有的結構。可假定整個鍊錶結構中沒有迴圈。程式盡量滿足 o n 時間複雜度,且僅...
鍊錶 相交鍊錶(leetcode 160
若相交,鍊錶a a c,鍊錶b b c.a c b b c a 則會在公共處c起點相遇。若不相交,a b b a 因此相遇處是null 用一句歌詞總結 走過你來時的路 public listnode getintersectionnode listnode heada,listnode headb ...
演算法 鍊錶 鍊錶相交
給定兩個 單向 鍊錶,判定它們是否相交並返回交點。請注意相交的定義基於節點的引用,而不是基於節點的值。換句話說,如果乙個鍊錶的第k個節點與另乙個鍊錶的第j個節點是同一節點 引用完全相同 則這兩個鍊錶相交。示例 1 輸入 intersectval 8,lista 4,1,8,4,5 listb 5,0...