输入两个链表,找出它们的第一个公共结点。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
// 1.先求两链表长度
int len1 = 0;
int len2 = 0;
ListNode* pCur1 = pHead1;
ListNode* pCur2 = pHead2;
while(pCur1){
++len1;
pCur1 = pCur1->next;
}
while(pCur2){
++len2;
pCur2 = pCur2->next;
}
pCur1 = pHead1;
pCur2 = pHead2;
// 2.长的先行 abs(len1-len2)步
if(len1 >= len2){
for(int i = 0; i < len1 - len2; ++i)
pCur1 = pCur1->next;
}else{
for(int i = 0; i < len2 - len1; ++i)
pCur2 = pCur2->next;
}
// 3.平时移动,相等则返回
while(pCur1 && pCur2){
if(pCur1 == pCur2)
return pCur1;
pCur1 = pCur1->next;
pCur2 = pCur2->next;
}
return NULL;
}
};