'''題目描述
輸入兩個鍊錶,找出它們的第乙個公共結點。
思路一:
先求出每個鍊錶的長度,分別為a+n和b+n
n表示兩個鍊錶公共部分的長度,從第乙個公共節點向後的每個節點都是兩個鍊錶的公共節點
也就是說從第乙個相同的公共節點往後的所有節點都相同
用指標1和指標2分別記錄兩個列表中當前感興趣的位置索引值
則如果a>b,相當於讓指標1比指標2多走a-b步,則找到第乙個兩個指標所指向的內容相同的地方就是兩個鍊錶的第乙個公共節點
思路二:
對於鍊錶1和鍊錶2,將鍊錶的每個節點分別儲存到兩個棧stack1和stack2中
然後從最後乙個節點(即棧頂元素)開始從後向前遍歷原始鍊錶中的元素
相當於從原始的兩個鍊錶中最後乙個節點開始遍歷,則最後乙個元素必然是兩個鍊錶最後乙個公共節點
向前遍歷得到的最後乙個相同的節點就是(從前向後遍歷兩個鍊錶的)第乙個公共節點
'''# -*- 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
len_1=0
len_2=0
phead1_copy=phead1
phead2_copy=phead2
while phead1_copy:
len_1+=1
phead1_copy=phead1_copy.next
while phead2_copy:
len_2+=1
phead2_copy=phead2_copy.next
if len_1>len_2:
start1=len_1-len_2
# start2=0
for i in range(start1):
phead1=phead1.next
while(phead1!=phead2):
phead1=phead1.next
phead2=phead2.next
return phead1
elif len_2>len_1:
start2=len_2-len_1
# start1=0
for i in range(start2):
phead2=phead2.next
while(phead1!=phead2):
phead1=phead1.next
phead2=phead2.next
return phead1
else:
while (phead1!= phead2):
phead1 = phead1.next
phead2 = phead2.next
return phead1
# -*- 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
stack1=
stack2=
p1,p2=phead1,phead2
while p1:
p1=p1.next
while p2:
p2=p2.next
while(stack1 and stack2 and stack1[-1]==stack2[-1]):
stack1.pop(-1)
stack2.pop(-1)
if not stack1:
return phead1
if not stack2:
return phead2
return stack1[-1].next
兩個鍊錶的第乙個公共結點 python
思路1 先順序遍歷第乙個鍊錶的結點,每遍歷到乙個結點時候,在第二個鍊錶上順序遍歷每個結點。如果在第二個鍊錶上有和第乙個鍊錶相同的結點,則找到了公共結點。複雜度o mn 思路2 使用輔助棧,分別把兩個鍊錶放入到兩個棧中,這樣兩個鍊錶的尾結點就位於兩個棧的棧頂,在比較棧頂元素是否相同。如果相同則彈出棧頂...
兩個鍊錶第乙個公共節點
先讓長的鍊錶的指標先走長的之差的步數,兩個再一起走,如果相遇就是第乙個公共節點 如果沒交點,就都走到空 struct listnode class solution while pl2 null 復位指標到頭節點 pl1 phead1 pl2 phead2 int dif len 0 if len1...
兩個鍊錶的第乙個公共結點
思路 獲取兩個鍊錶的長度,求的長度差n,讓長鍊表先遍歷n次,然後長鍊表和短鍊錶同時遍歷,當長鍊錶和短鍊錶相等時,即為第一公共結點。o m1 m2 public class findfirstcomnode int len1 getnodelength root1 int len2 getnodele...