您的位置:首页 > 其它

[LeetCode系列] 双单链表共同节点搜索问题

2015-03-29 16:22 351 查看
找到两个单链表的共同节点.

举例来说, 下面两个链表A和B:

A:          a1 → a2
↘
c1 → c2 → c3
↗
B:     b1 → b2 → b3

共同节点为c1.

分析:

共同节点距离A,B的起点headA, headB的距离差为定值, 等于它们的各自总长的差值, 我们只需要求出这个差值, 把两个链表的头移动到距离c1相等距离的起点处即可.

代码:

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
int deltaLength = getLengthOfList(headA) - getLengthOfList(headB);
// A > B
if (deltaLength > 0)
{
while (deltaLength-- > 0) headA = headA->next;
}
// A < B
else if (deltaLength < 0)
{
while (deltaLength++ < 0) headB = headB->next;
}
// now A and B has the same distance to intersection node
while (NULL != headA && NULL != headB)
{
if (headA == headB)
return headA;
headA = headA->next;
headB = headB->next;
}
return NULL;
}

int getLengthOfList(ListNode *head)
{
int res = 0;
while (NULL != head)
{
res++;
head = head->next;
}
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: