# 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 ):
        # write code here
        head1 = pHead1
        head2 = pHead2
        while pHead1 != pHead2:
            # 同时遍历两个链表,
            # 一个链表遍历到None以后,就在其后面紧接着遍历另一个链表,如此往复。
            # 相当于把两个链表进行无限循环,它们终会在公共节点处相遇,相遇后直接返回第一个公共节点的指针。
            # 例1:
            # 1,2,3,6,7,None,4,5,(6,7,None)
            # 4,5,6,7,None,1,2,3,(6,7,None)
            # 它们在(6,7,None)相遇,(6,7,None)是两个链表的公共节点。
            # 例2:
            # 1,None,2,3,(None)
            # 2,3,None,1,(None)
            # 它们在(None)相遇,说明它们没有公共节点。
            pHead1 = (head2 if pHead1 is None else pHead1.next)
            pHead2 = (head1 if pHead2 is None else pHead2.next)
        
        return pHead1