1. 题目描述
2. 解题思路
如果两个链表相交的话,它们相交之后的长度是一样的,我们不用考虑。问题就在于我们不知道两个链表的前面的长度,不知道它们何时会相遇,那么我们可以先求出两个链表从头到尾的长度,求它们的差,让长度长的先走它们的长度之差步,这样它们剩余的路径长度就一样了。
3. 代码实现
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* head1, ListNode* head2)
{
int n1 = 0, n2 = 0;
ListNode *cur1 = head1, *cur2 = head2;
while(cur1)
{
cur1 = cur1->next;
n1++;
}
while(cur2)
{
cur2 = cur2->next;
n2++;
}
int sub = max(n1, n2) - min(n1, n2);
cur1 = head1, cur2 = head2;
if(n1 > n2)
{
while(sub--)
{
cur1 = cur1->next;
}
}
else
{
while(sub--)
{
cur2 = cur2->next;
}
}
while(cur1 != cur2)
{
cur1 = cur1->next;
cur2 = cur2->next;
}
return cur1;
}
};