题目描述
输入两个链表,找出它们的第一个公共结点。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
ListNode *p = pHead1;
ListNode *q = pHead2;
int len1=0,len2 = 0;
while(p)
{
len1++;
p = p->next;
}
while(q)
{
len2++;
q = q->next;
} //find the lenth of List
ListNode *newHead = len1>len2 ? pHead1:pHead2;
ListNode *head = len1>len2 ? pHead2:pHead1;
int step = abs(len1-len2);
while(step > 0)
{
newHead = newHead->next;
step--;
} //the longer list firsly goes several steps
while(head&&newHead)
{
if(head == newHead)
return head;
else
{
head = head->next;
newHead= newHead->next;
}
}
return NULL;
}
};