先计算两个链表的长度sz1, sz2,然后将较长的链表遍历到abs(sz1-sz2)的位置,然后逐一比较,相等则直接返回该节点

/*
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 pHead1;
        ListNode* temp1 = pHead1, *temp2 = pHead2, *pmax, *pmin;
        int sz1=0, sz2=0, min=0, max=0, idx=0;
        while(temp1){
            sz1++;
            temp1 = temp1->next;
        }
        while(temp2){
            sz2++;
            temp2 = temp2->next;
        }
        min = sz1<sz2?sz1:sz2;
        max = sz1>=sz2?sz1:sz2;

        pmax = sz1>=sz2?pHead1:pHead2;
        pmin = sz1<sz2?pHead1:pHead2;

        while(idx++<max-min) pmax = pmax->next;
        
        idx = 0;
        while(idx++<min){
            if(pmax==pmin) return pmax;
            pmin = pmin->next;
            pmax = pmax->next;
        }
        
        return nullptr;
        
       
    }
};