题意
输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
思路
- 思路一(常规):
- 思路二(双指针):
代码
- 常规思路
class Solution:
def FindFirstCommonNode(self , pHead1 , pHead2 ):
# write code here
if not pHead1 or not pHead2:
return None
n = 0
end1 = pHead1
end2 = pHead2
while end1.next:
n += 1
end1 = end1.next
while end2.next:
n -= 1
end2 = end2.next
if end1!=end2:
return None
cur1 = pHead1 if n>=0 else pHead2
cur2 = pHead2 if cur1==pHead1 else pHead1
n = abs(n)
while n>0:
cur1 = cur1.next
n -= 1
while cur1!=cur2:
cur1=cur1.next
cur2=cur2.next
return cur1
- 双指针思路
class Solution:
def FindFirstCommonNode(self , pHead1 , pHead2 ):
# write code here
a = pHead1
b = pHead2
while a!=b:
a = a.next if a else pHead2
b = b.next if b else pHead1
return a