思路:
- 首先遍历两个链表 求出两个链表的长度len1、len2;以及长度差dis;
- 让长的为list1 短的为list2; list1 走dis步;
- 然后list1 list2 同时走 当list1==list2 的时候找到这个公共节点;
代码:
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2)
{
if(pHead1==nullptr||!pHead2)
return nullptr;
ListNode *p1=pHead1;
ListNode *p2=pHead2;
int len1=0,len2=0;
while(p1)
{
len1++;
p1=p1->next;
}
while(p2)
{
len2++;
p2=p2->next;
}
int dis=len1-len2;
if(dis>0)
{
p1=pHead1;
p2=pHead2;
}
else
{
dis=0-dis;
p1=pHead2;
p2=pHead1;
}
while(dis-->0)
p1=p1->next;
while(p1&&p2)
{
if(p1==p2)
break;
p1=p1->next;
p2=p2->next;
}
return p1;
}
};