解题思路:
两个链表的从第一个公共节点开始,之后的节点均为公共的,若两个链表的长度不一致,则先将指向长度较长的链表的头结点向后移动两个链表长度差个位置,然后将此指针和链表长度较短的头指针同时后移,若两个指针相同,则就找到了第一个公共指针。
实现代码如下:
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
int length1 = findListLength(pHead1);
int length2 = findListLength(pHead2);
if(length1>length2){
for(int i = 0; i < length1-length2; ++i){
pHead1 = pHead1->next;
}
}
else{
for(int i = 0; i < length2-length1; ++i){
pHead2 = pHead2->next;
}
}
while(pHead1){
if(pHead1 == pHead2) return pHead1;
pHead1 = pHead1->next;
pHead2 = pHead2->next;
}
return NULL;
}
int findListLength(ListNode* pHead){
int length = 0;
while(pHead){
++length;
pHead = pHead->next;
}
return length;
}
};
想不通可以参考下面的图: