题解 | #两个链表的第一个公共结点#

两个链表的第一个公共结点

http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46

双指针法

双指针,分别指向链表1和链表2的表头,同时往后移动,若链表1到达末尾,则跳到链表2的表头继续进行(链表2同理)。当指针相同时,即为共用链表段的开端(数学原理)。 alt

# 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
全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
06-06 21:28
点赞 评论 收藏
分享
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务