题解 | 两个链表的第一个公共结点:暴力解法,我相信你肯定能看懂!
两个链表的第一个公共结点
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* h1, ListNode* h2)
{
// 1、处理边界
if(h1==nullptr||h2==nullptr) return nullptr;
// 2、统计各个链表的节点数
int num1=0,num2=0;
ListNode* cur1=h1;
ListNode* cur2=h2;
while(cur1)
{
num1++;
cur1=cur1->next;
}
while(cur2)
{
num2++;
cur2=cur2->next;
}
cur1=h1;
cur2=h2;
if(num1>num2)
{
for(int i=0;i<num1-num2;i++)
cur1=cur1->next;
}
else if(num1<num2)
{
for(int i=0;i<num2-num1;i++)
cur2=cur2->next;
}
else
{
cur1=h1;
cur2=h2;
}
// 3、双方都以最小的链表长度为起点,来进行遍历,如果相遇则就是第一个相交结点!
while(cur1!=cur2)
{
cur1=cur1->next;
cur2=cur2->next;
}
return cur1;
}
};


查看28道真题和解析