先计算两个链表的长度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;
}
};