输入两个链表,输出它们的第一个公共结点
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode(ListNode *pHead1, ListNode *pHead2) {
int len1 = 0, len2 = 0;
ListNode* p1 = pHead1;
ListNode* p2 = pHead2;
if(p1==NULL || p2==NULL )
return NULL;
while (p1 != NULL)
{
p1 = p1->next;
len1++;
}
while (p2 != NULL)
{
p2 = p2->next;
len2++;
}
p1 = pHead1; p2 = pHead2;//p1指向长链表,p2指向短链表
if (len1<len2)
{
p1 = pHead2;
p2 = pHead1;
}
int i = 0;
while (i < abs(len1 - len2))
{
p1 = p1->next; ++i;
}
while ((p1 != NULL) && (p2 != NULL)&& (p1 != p2))
{
p1 = p1->next;
p2 = p2->next;
}
ListNode* res=p1;
return res;
}
};