题目概述
解题思路
首先,分别求出两个链表L1,L2的长度L1_length,L2_length
比较L1_length,L2_length的大小,并求出差值的绝对值K
定义两个指针cur1,cur2,分别指向两个链表
令长度较长的链表先走K步
然后同时走,直到两个指针指向的位置相同停止
注意:题目要求的是求两个链表的第一个公共节点,这里我们假设已经确定两条链表是相交的了
代码实现
int ListLength(ListNode* phead)
{
int count = 0;
ListNode* cur = phead;
while (cur)
{
count++;
cur = cur->next;
}
return count;
}
//假定两条链表是一定相交的
ListNode* FindCommonNode(ListNode** phead1,ListNode** phead2)
{
int l1_length = ListLength(*phead1);
int l2_length = ListLength(*phead2);
ListNode* cur1 = *phead1;
ListNode* cur2 = *phead2;
if (l1_length > l2_length)
{
int tmp = l1_length - l2_length;
while (tmp--)
cur1 = cur1->next;
}
if (l1_length < l2_length)
{
int tmp = l2_length - l1_length;
while (tmp--)
cur2 = cur2->next;
}
while (cur1 != cur2)
{
cur1 = cur1->next;
cur2 = cur2->next;
}
return cur1;
}