兩個鍊錶的公共節點

2021-09-26 03:36:49 字數 1149 閱讀 9861

輸入兩個鍊錶,找出它們的第乙個公共結點。

因為兩個鍊錶的長度可能不一樣,首先遍歷兩個鍊錶求出兩個鍊錶的長度,假設乙個鍊錶的長度為m,另乙個鍊錶的長度為n,得到m和n的差值dif,讓比較長的那個鍊錶先走dif步,然後再同時遍歷兩個鍊錶,直到遇到相同的節點為止。

python**:

# -*- coding:utf-8 -*-

# class listnode:

# def __init__(self, x):

# self.val = x

# self.next = none

class solution:

def findfirstcommonnode(self, phead1, phead2):

# write code here

length1 = self.getlength(phead1)

length2 = self.getlength(phead2)

if length1 == 0 or length2 == 0:

return none

if length2 > length1:

dif = length2 - length1

for i in range(0,dif):

phead2 = phead2.next

else:

dif = length1 - length2

for i in range(0,dif):

phead1 = phead1.next

while phead1 != phead2 and phead1 and phead2:

phead1 = phead1.next

phead2 = phead2.next

if phead1 == phead2:

return phead1

return none

def getlength(self,phead):

count = 0

if not phead:

return 0

while phead:

count += 1

phead = phead.next

return count

找兩個鍊錶的公共節點

首先考慮兩個鍊錶無環的情況。將鍊錶a的尾節點指向頭節點從而形成環。用快慢指標遍歷鍊錶b,乙個一次移動2單位,另乙個移動1單位。如果不相遇則不存在公共節點。如果相遇,則讓其中乙個指標指向b,兩個指標以1單位 次的速度移動,直到相遇。相遇時指向的節點就是公共節點的起始。最後記得將a的尾節點恢復。如下。其...

找兩個鍊錶的公共節點

首先考慮兩個鍊錶無環的情況。將鍊錶a的尾節點指向頭節點從而形成環。用快慢指標遍歷鍊錶b,乙個一次移動2單位,另乙個移動1單位。如果不相遇則不存在公共節點。如果相遇,則讓其中乙個指標指向b,兩個指標以1單位 次的速度移動,直到相遇。相遇時指向的節點就是公共節點的起始。最後記得將a的尾節點恢復。如下。其...

兩個鍊錶第乙個公共節點

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