您的位置:首页 > 职场人生

【面试题】剑指Offer-37-求两个链表的第一个公共节点

2017-04-17 18:43 483 查看

题目概述



解题思路



首先,分别求出两个链表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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: