题目来源:牛客网
题目描述
输入两个链表,找出它们的第一个公共结点。
题目解析:
1、比较两者的长度,长的先走,之后一起走,走到两个相同的时候即是第一个公共结点
2、两个指针分别指向这两个结点,不同的时候,则往前走,相同则停。
代码:
1、先求长度
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
int len1 = GetlengthofList(pHead1);
int len2 = GetlengthofList(pHead2);
ListNode* pNode1 = pHead1;
ListNode* pNode2 = pHead2;
int len = len1 - len2;
if(len2 > len1)
{
pNode1 = pHead2;
pNode2 = pHead1;
len = len2 - len1;
}
for(int i =0;i<len ;i++)
{
pNode1 = pNode1->next;
}
while(pNode1!=NULL && pNode2!=NULL && pNode1!=pNode2)
{
pNode1 = pNode1->next;
pNode2 = pNode2->next;
}
return pNode1;
}
int GetlengthofList(ListNode* pHead)
{
int length = 0;
while(pHead!=NULL)
{
length++;
pHead = pHead->next;
}
return length;
}
};
2、直接看指针
ListNode *p1 = pHead1;
ListNode *p2 = pHead2;
while(p1!=p2){
p1 = (p1==NULL ? pHead2 : p1->next);
p2 = (p2==NULL ? pHead1 : p2->next);
}
return p1;