(个人水平有限,请见谅!)
题目描述:
输入两个链表,找出它们的第一个公共结点。
代码示例:
/*
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 = findListLength(pHead1);
int len2 = findListLength(pHead2);
if (len1 > len2)
pHead1 = walkListPos(pHead1, len1-len2);
else
pHead2 = walkListPos(pHead2, len2-len1);
while (pHead1 != NULL)
{
if (pHead1 == pHead2)
return pHead1;
else
{
pHead1 = pHead1->next;
pHead2 = pHead2->next;
}
}
return NULL;
}
int findListLength(ListNode* pHead)
{
int sum = 0;
while (pHead != NULL)
{
sum++;
pHead = pHead->next;
}
return sum;
}
ListNode* walkListPos(ListNode* pHead, int n)
{
while (n--)
pHead = pHead->next;
return pHead;
}
};