您的位置:首页 > 其它

Leetcode#160 Intersection of Two Linked Lists

2015-02-02 18:22 127 查看
原题地址

先将A链末尾和B链头部接起来

然后判断是否有环,如果无环,说明肯定不想交,如果有环,那么相交的位置就是环开始的位置

第一遍做的时候没遇到什么问题,第二遍做的时候各种出错,后来发现原来在用快慢指针法的时候快慢指针要从起点开始,否则计算出来的第一个相交位置不是环开始的位置。。

代码:

ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if (!headA || !headB)
return NULL;

ListNode *h = headA;
while (h->next)
h = h->next;
h->next = headB;

ListNode *fast = headA;
ListNode *slow = headA;
bool running = false;
ListNode *res = NULL;

while ((!running || fast != slow) && fast && fast->next) {
running = true;
fast = fast->next->next;
slow = slow->next;
}
if (fast == slow) {
res = headA;
while (res != slow) {
res = res->next;
slow = slow->next;
}
}
h->next = NULL;

return res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: