/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
        // 都为空就不往下了
        if (pHead1 == nullptr || pHead2 == nullptr)
            return nullptr;

        // 定义两个链表指针,分别指向头结点
        ListNode* l1 = pHead1, * l2 = pHead2;

        // 通过这个循环,先走一遍“自家野区”,再走一遍“敌方野区”
        while (l1 != l2)
        {
            if (l1 != nullptr)
                l1 = l1->next;
            else
                l1 = pHead2;

            if (l2 != nullptr)
                l2 = l2->next;
            else
                l2 = pHead1;
        }

        // 返回重合处的指针
        return l1;
    }
};