兩個鍊錶的第乙個公共節點

2021-09-11 06:39:09 字數 1403 閱讀 2637

先建立輔助鍊錶,測出2個鍊錶的長度,從長鍊錶數2個鍊錶長度差的步數,再讓2個鍊錶一起走

如1, 2, 3, 4, 5和6 ,4, 5 4,5是2個鍊錶相交的部分

兩條相交的鍊錶呈y型,尾部相同 用is

返回第乙個公共節點 ,後面的不返回

# -- coding:utf-8 --

class listnode:

definit(self, x):

self.val = x

self.next = none

class solution:

def findfirstcommonnode(self, phead1, phead2):

if not phead1 or not phead2:

return none

p1, p2 = phead1, phead2

length1 = length2 = 0

while p1:

length1 += 1

p1 = p1.next

while p2:

length2 += 1

p2 = p2.next

if length1 > length2:

while length1 - length2:

phead1 = phead1.next

length1 -= 1

else:

while length2 - length1:

phead2 = phead2.next

length2 -= 1

while phead1 and phead2:

if phead1 is phead2:

return phead1

phead1 = phead1.next

phead2 = phead2.next

return none

if __name__ == "__main__":

node11 = listnode(1) #呼叫listnode()類

node12 = listnode(2)

node13 = listnode(3)

node14 = listnode(4)

node15 = listnode(5)

node21 = listnode(6)

node11.next = node12

node12.next = node13

node13.next = node14

node14.next = node15

node21.next = node14

s = solution()

print(s.findfirstcommonnode(node11, node21))

兩個鍊錶第乙個公共節點

先讓長的鍊錶的指標先走長的之差的步數,兩個再一起走,如果相遇就是第乙個公共節點 如果沒交點,就都走到空 struct listnode class solution while pl2 null 復位指標到頭節點 pl1 phead1 pl2 phead2 int dif len 0 if len1...

兩個鍊錶的第乙個公共節點

輸入兩個鍊錶,找出它們的第乙個公共的節點。碰到這種題的時候千萬不要用挨個遍歷的方法,時間複雜度高 對於兩個有相同節點的鍊錶的形狀一定是y。而不是x。然後還可能乙個鍊錶長乙個鍊錶短,我們可以求出差值,然後讓長鍊表先走差值的長度,然後在挨個比較就可以了。這樣時間複雜度就小很多了 劍指offer 名企面試...

兩個鍊錶的第乙個公共節點

題目 輸入兩個鍊錶,找出它們的第乙個公共結點。思路 先遍歷兩個鍊錶得到它們的長度,求出長鍊錶比短鍊錶多幾個 第二次遍歷,在長鍊表上先走若干步,接著同時在兩個鍊錶上遍歷,找到的第乙個相同的結點就是它們的第乙個公共結點。public class listnode public listnode find...