题解 | #两个链表的第一个公共结点#
两个链表的第一个公共结点
http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46
双指针法
双指针,分别指向链表1和链表2的表头,同时往后移动,若链表1到达末尾,则跳到链表2的表头继续进行(链表2同理)。当指针相同时,即为共用链表段的开端(数学原理)。
# def __init__(self, x):
# self.val = x
# self.next = None
#
# @param pHead1 ListNode类
# @param pHead2 ListNode类
# @return ListNode类
#
class Solution:
def FindFirstCommonNode(self , pHead1 , pHead2 ):
if pHead1 == None or pHead2 == None: return None
# 记录表头
p1,p2 = pHead1,pHead2
time = 0
while pHead1 != pHead2:
# 最多只遍历一轮,防止没有公共节点时,出现无限循环
if time == 2:
return None
# 若链表1遍历完,跳到链表2
if pHead1.next:
pHead1 = pHead1.next
else:
pHead1 = p2
# 若链表2遍历完,跳到链表1
if pHead2.next:
pHead2 = pHead2.next
else:
pHead2 = p1
time += 1
return pHead1