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