Leetcode 相交鍊錶

2021-10-03 05:29:12 字數 1193 閱讀 2711

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

思路:如果兩個鍊錶相交,那麼鍊錶的末尾結點應該是相同

pa, pb兩個指標初始分別指向鍊錶a和b 的起點,假設a的長度小於b,

當pa走完煉表時,pb還未到達尾部,此時pa指向鍊錶b的頭部,兩個指標之間差為鍊錶a的長度

當pb移動到鍊錶末尾時,pb指向鍊錶a的頭部,此時兩個指標到達末尾要走的路程一樣,如果在某點處pa == pb, 那麼兩個鍊錶相交於該點。

兩個指標分別都走了鍊錶a的長度+鍊錶b的長度,如果兩者相交,最後一段路程是一起走的,經過的鍊錶節點都相同。

# definition for singly-linked list.

# class listnode:

# def __init__(self, x):

# self.val = x

# self.next = none

class

solution

:def

getintersectionnode

(self, heada: listnode, headb: listnode)

-> listnode:

ifnot heada or

not headb:

return

none

pa = heada

pb = headb

while pa != pb:

if pa:

pa = pa.

next

else

: pa = headb

if pb:

pb = pb.

next

else

: pb = heada

return pa

LeetCode 相交鍊錶

編寫乙個程式,找到兩個單鏈表相交的起始節點。例如,下面的兩個鍊錶 a a1 a2 c1 c2 c3 b b1 b2 b3在節點 c1 開始相交。注意 思路1 先使兩個鍊錶等長,然後一起遍歷兩個鍊錶 第乙個相等的即為所求的起始結點。definition for singly linked list.s...

Leetcode相交鍊錶

public class listnode listnodes new hashset while heada null while headb null return null 寫點 哈哈,拿到題我想到用啥結構做呢?然後想著最近一直在用雜湊解決問題,這題用雜湊呢?可以,搞它!先把鍊錶a放到表裡,然...

LeetCode 相交鍊錶

先計算出兩個鍊錶的長度 o n 將長的乙個鍊錶的指示指標移動到和短鍊錶相同長度 o n 兩個鍊錶指示指標同時向前移動,直到二者相同或者null definition for singly linked list.struct listnode class solution while b next ...