1.问题描述
输入两个链表,找出他们的第一个公共结点。(来自《剑指offer》)
2.问题分析
我们可以先统计出2个链表的长度,然后计算两个链表相差的结点数,让长的链表先走相差的结点数,然后俩个链表在一起走,直到遇到相同的结点,然后返回。
3.分析
ListNode* FindFirstCommonNode(ListNode *head1,ListNode *head2)
{
if (head1 == NULL || head2 == NULL)
{
return NULL;
}
int length1 = 1;
int length2 = 1;
ListNode *node1 = head1;
ListNode *node2 = head2;
while (node1->next != NULL)
{
length1 ++;
node1 = node1->next;
}
while (node2->next != NULL)
{
length2 ++;
node2 = node2->next;
}
node1 = head1;
node2 = head2;
if (length2 > length1)
{
while (length2 > length1)
{
length2 --;
node2 = node2->next;
}
}
if (length2 < length1)
{
while (length2 < length1)
{
length1 --;
node1 = node1->next;
}
}
while (node1 != NULL && node2 != NULL)
{
if (node1 == node2)
{
return node1;
}
node1 = node1->next;
node2 = node2->next;
}
return NULL;
}