輸入兩個鍊錶,找出它們的第乙個公共結點。
因為兩個鍊錶的長度可能不一樣,首先遍歷兩個鍊錶求出兩個鍊錶的長度,假設乙個鍊錶的長度為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...