* struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */

/**
 * 
 * @param pHead1 ListNode类 
 * @param pHead2 ListNode类 
 * @return ListNode类
 */
struct ListNode* FindFirstCommonNode(struct ListNode* pHead1, struct ListNode* pHead2 ) {
    // write code here
    struct ListNode* p0;
    struct ListNode* p1;
    struct ListNode* p2;
    struct ListNode* p3;
    p0 = pHead1;
    p1 = pHead2;
    p2 = pHead1;
    p3 = pHead2;
    if( p0==NULL || p1==NULL)
    {
        return NULL;
    }
//     if(p0 == p1)
//     {
//         return p0;
//     }
    while(p0->next!=NULL)
    {
        p0 = p0->next;   //找到链表1最右边的节点
    }
    while(p1->next!=NULL)
    {
        p1 = p1->next;   //找到链表2最右边的节点
    }
    while(p0 == p1)
    {
        p2 = pHead1;
        p3 = pHead2;
        while(p2->next!=p0)
        {
            p2 = p2->next;   //找p0前面的一个节点
        }
        while(p3->next!=p1)
        {
            p3 = p3->next;   //找p1前面的一个节点
        }
        if(p2 == p3)
        {
            p0 = p2;
            p1 = p3;
            if(p3==pHead2||p2==pHead1)
            {
                return p0;
            }
        }
        else
        {
            return p0;
        } 
    }
    return NULL;
    
}