用map做

/*
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 || !pHead2){
            return NULL;
        }


        ListNode* res;

        unordered_map<ListNode*, int> m;

        while(pHead1){
            m[pHead1] ++;
            pHead1 = pHead1->next;
        }

        while(pHead2){
            m[pHead2] ++;

            if(m[pHead2] == 2){
                return pHead2;
            }

            pHead2 = pHead2->next;
        }

        return res;
    }
};