剑指offer:两个链表的第一个公共结点
题目:输入两个链表,找出它们的第一个公共结点。
分析:先计算两个链表长度,让长的那个先走差距步,然后一起走,相遇时就是答案。
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
if(pHead1==nullptr || pHead2==nullptr)
return nullptr;
//计算两个链表的长度
ListNode* cur1=pHead1;
ListNode* cur2=pHead2;
int count1=0;
int count2=0;
while(cur1)
{
count1++;
cur1=cur1->next;
}
while(cur2)
{
count2++;
cur2=cur2->next;
}
ListNode* Long=pHead1;
ListNode* Short=pHead2;
if(count1<count2)
{
Long=pHead2;
Short=pHead1;
}
//长的链表先走差距步
int div=abs(count1-count2);
while(div--)
{
Long=Long->next;
}
//一起走
while(Long!=Short)
{
Long=Long->next;
Short=Short->next;
}
//来到这说明两个相遇了
return Long;
}