题解 | #两个链表的第一个公共结点#
两个链表的第一个公共结点
https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46
//思路 先求出两个链表的长度,然后让长的链表先走二者长度的差值
//再让两个链表一起移动,如果出现相等的情况,则说明满足条件,返回该节点
//否则当其中一个节点为空时,说明不满足条件,则返回NULL
//思路 先求出两个链表的长度,然后让长的链表先走二者长度的差值
//再让两个链表一起移动,如果出现相等的情况,则说明满足条件,返回该节点
//否则当其中一个节点为空时,说明不满足条件,则返回NULL
struct ListNode* FindFirstCommonNode(struct ListNode* pHead1, struct ListNode* pHead2 ) {
// write code here
struct ListNode* p1=pHead1;
struct ListNode* p2=pHead2;
int leng1=0;
int leng2=0;
while(p1)
{
p1=p1->next;
leng1++;
}
while(p2)
{
p2=p2->next;
leng2++;
}
struct ListNode* longlist=pHead1;
struct ListNode* shortlist=pHead2;
if(leng1<leng2)
{
longlist=pHead2;
shortlist=pHead1;
}
int ret=abs(leng1-leng2);
while(ret--)
{
longlist=longlist->next;
}
while(longlist)//当其中一个链表为空时
{
if(shortlist==longlist)
{
return longlist;
}
longlist=longlist->next;
shortlist=shortlist->next;
}
return NULL;
}

美的集团公司福利 818人发布