题目描述:
输入两个链表,找出它们的第一个公共结点。
思路:首先如图所示,
什么是公共节点,也就是从这个节点开始所有的节点都相同,所以从最后一个节点到第一个相同的节点都相同,所以枚举两个链表的长度,然后求出两链表长度之差,然后同步到同样位置开始遍历,第一个相同点则为第一个公共点。
代码:
/*
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,*ans;
int len1=0,len2=0;
for(p=pHead1;p;p=p->next) len1++;
for(p=pHead2;p;p=p->next) len2++;
if(len1==0||len2==0) return NULL;
int len = len1-len2;
if(len>0){
while(len--) pHead1 = pHead1->next;
}
else {
len = -len;
while(len--) pHead2 = pHead2->next;
}
while(pHead1&&pHead2)
{
if(pHead1!=pHead2)
{
pHead1=pHead1->next;
pHead2=pHead2->next;
}
else
{
ans = pHead1;
break;
}
}
return ans;
}
};