题目描述
输入两个链表,找出它们的第一个公共结点。
思路:首先两个单链表有公共节点时只可能为“Y”结构,不可能为“X”结构,因为一个链表结构只能有一个next指针,而不可能指向node节点。让长的链表先走,然后两个一起走,直到相等。
/*
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 == NULL || pHead2 == NULL)
return NULL;
int count1= 0;
int count2 = 0;
ListNode* p1 = pHead1;
ListNode* p2 = pHead2;
while(pHead1 != NULL)
{
pHead1 = pHead1->next;
count1++;
}
while(pHead2 != NULL)
{
pHead2 = pHead2->next;
count2++;
}
int dif = count1 - count2;
int n = (count1 > count2) ? (count1-count2):(count2-count1);
if(dif > 0)
{
for(int i = 0;i < n;i++)
{
p1 = p1->next;
}
}
else{
for(int i = 0;i < -n;i++)
{
p2 = p2->next;
}
}
while(p1 != NULL && p2 != NULL )
{
if(p1 == p2)
{
break;
}
else{
p1 = p1->next;
p2 = p2->next;
}
}
return p1;
}
};