# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None   
class Solution:
    def FindFirstCommonNode(self, pHead1, pHead2):
        # write code here
        def fun(shortPointer, longPointer, shortHead, longHead):
            k = 0
            # 寻找出链表长度之间的差值
            while longPointer:
                longPointer = longPointer.next
                k += 1
            # 先让长的那个走K步
            shortPointer = shortHead
            longPointer = longHead
            for i in range(k):
                longPointer = longPointer.next
            while shortPointer != longPointer:
                shortPointer = shortPointer.next
                longPointer = longPointer.next
            return shortPointer

        pTmp1 = pHead1
        pTmp2 = pHead2
        while pTmp1 and pTmp2:
            # 当两个链表长度一样的时候
            if pTmp1 == pTmp2:
                return pTmp1
            pTmp1 = pTmp1.next
            pTmp2 = pTmp2.next
        if pTmp1:
            return fun(pTmp2, pTmp1, pHead2, pHead1)
        else:
            return fun(pTmp1, pTmp2, pHead1, pHead2)