题解 | #两个链表的第一个公共结点#
两个链表的第一个公共结点
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; }