题解 | #两个链表的第一个公共结点#
两个链表的第一个公共结点
https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { ListNode* h1 = pHead1; ListNode* h2 = pHead2; int L1 = 0; int L2 = 0; int m; //计算链表1长度 while(h1){ L1++; h1 = h1->next; } //计算链表2长度 while(h2){ L2++; h2 = h2->next; } //长的链表先移动|L1-L2| h1 = pHead1; h2 = pHead2; if(L1>=L2){ m = L1 - L2; while(m--){ h1 = h1->next; } }else{ m = L2 - L1; while(m--){ h2 = h2->next; } } //同步比较,直到找出第一个相同节点 while(h1 != h2){ h1 = h1->next; h2 = h2->next; } return h1; } };