• 对于链表长度一样大的情况,两个链表各遍历走一遍就知道是否有公共解
  • 对于长度不一样的,当一个链表走到末尾,它的下一个接着另一个链表的头开始走,另一个也做同样的操作。如果两个链表有相同的节点,在第二轮遍历中会相遇。
class Solution:
    def FindFirstCommonNode(self , pHead1 , pHead2 ):
        # write code here
        # 长度相同有公共结点,第一次就遍历到;没有公共结点,走到尾部NULL相遇,返回NULL
        # 长度不同有公共结点,第一遍走完长度的差值就出来了,第二遍一起到公共结点;没有公共,第二遍一起到结尾NULL。
        p1 = pHead1
        p2 = pHead2
        while p1 != p2:
            if not p1:
                p1 = pHead2
            else:
                p1 = p1.next
            if not p2:
                p2 = pHead1
            else:
                p2 = p2.next
        return p1