双指针思路,设置两个指针,分别遍历链表,遍历完第一条链表之后,开始遍历另一条链表,如果相交,就会在相同的节点处相遇,如果不相交则都会走到尾节点处。空间复杂度要优于用set集合的方式
# class ListNode:
#     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 not pHead1&nbs***bsp;not pHead2:
            return None
            
        # write code here
        p1 = pHead1
        p2 = pHead2
        while p1 != p2:
            if p1:
                p1 = p1.next
            else:
                p1 = pHead2
            if p2:
                p2 = p2.next
            else:
                p2 = pHead1
        return p1