题目描述
输入两个链表,找出它们的第一个公共结点。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2)
{
ListNode *p1=pHead1;
ListNode *p2=pHead2;
ListNode *plong=pHead1;
ListNode *pshort=pHead2;
int len1=0;
int len2=0;
if(pHead2==NULL||pHead2==NULL)return NULL;
while(p1!=NULL)
{
p1=p1->next;
++len1;
}
while(p2!=NULL)
{
p2=p2->next;
++len2;
}
int difflen;
difflen=len1-len2;
if(len2>len1)
{
difflen=len2-len1;
plong=pHead2;
pshort=pHead1;
}
for(int i=0;i<difflen;i++)
{
plong=plong->next;
}
while((plong!=NULL)&&(pshort!=NULL)&&(plong!=pshort))
{
plong=plong->next;
pshort=pshort->next;
}
return plong;
}
};
只要相交,肯定成Y字形,链表尾部相同,分别求得两条链表的长度,长的向前移动差值个节点,然后同时出发,找相等点