/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
  public:
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
        ListNode* p1 = pHead1;
        ListNode* p2 = pHead2;
        int i = 0, j = 0;
        if (pHead1 == nullptr || pHead2 == nullptr) return nullptr;
        while (p1 != nullptr || p2 != nullptr) {
            if (p1 != nullptr) {
                p1 = p1->next;
                i++;
            }
            if (p2 != nullptr) {
                p2 = p2->next;
                j++;
            }
        }
        if (i >= j) {
            for (int k = 0; k < i - j; k++) {
                pHead1 = pHead1->next;
            }
        } else {
            for (int k = 0; k < j - i; k++) {
                pHead2 = pHead2->next;
            }
        }
        while (pHead1 != nullptr && pHead2 != nullptr) {
            if (pHead1 == pHead2)return pHead1;
            pHead1 = pHead1->next;
            pHead2 = pHead2->next;
        }
        return nullptr;
    }
};

比较两个链表的长度,然后让头指针在齐平位置同时出发即可。