【 声明:版权所有,转载请标明出处,请勿用于商业用途。 联系信箱:libin493073668@sina.com】
题目描述
输入两个链表,找出它们的第一个公共结点。
思路
先求出两个链表的长度,然后使得长链表的指针往前走,直到他们长度相等,然后两个指针一起走,直到到达公共结点。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution
{
public:
ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2)
{
if(pHead1==nullptr || pHead2==nullptr) return nullptr;
int len1 = 0;
int len2 = 0;
ListNode *ptr1 = pHead1;
ListNode *ptr2 = pHead2;
while(ptr1)
{
ptr1 = ptr1->next;
len1++;
}
while(ptr2)
{
ptr2 = ptr2->next;
len2++;
}
ptr1 = pHead1;
ptr2 = pHead2;
if(len1>len2)
{
int cnt = len1-len2;
while(cnt--)
{
ptr1 = ptr1->next;
}
}
if(len1<len2)
{
int cnt = len2-len1;
while(cnt--)
{
ptr2 = ptr2->next;
}
}
while(ptr1!=ptr2)
{
ptr1 = ptr1->next;
ptr2 = ptr2->next;
}
return ptr1;
}
};

本文介绍了一种高效算法来解决寻找两个链表第一个公共节点的问题。通过计算两链表长度差并同步移动指针,最终找到公共节点。
539

被折叠的 条评论
为什么被折叠?



