/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

/**
 * 
 * @param pHead1 ListNode类 
 * @param pHead2 ListNode类 
 * @return ListNode类
 */
struct ListNode* FindFirstCommonNode(struct ListNode* pHead1, struct ListNode* pHead2 ) {
    // write code here
    struct ListNode* p=pHead1;
    struct ListNode* q=pHead2;
    int i=0;
    if(p==NULL || q==NULL)
        return NULL;

    //循环之前需要确保两个链表不为空
    while(i!=2)     //一共遍历两次,目的为了使两个变量都分别遍历过两个链表,使其所经过的路程一样
    {
        if(p==q)
            return p;
        p=p->next;
        q=q->next;
        if(p==NULL) //p将p所表示的链表遍历完成后,从另一个链表的头节点开始遍历
        {
            p=pHead2;
            i++;
        }
        if(q==NULL)
        {
            q=pHead1;
        }
    }
    return NULL;
}