您的位置:首页 > 其它

【leetcode】Linked List Cycle II

2015-07-30 19:12 323 查看
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
if(head == NULL || head->next == NULL) return NULL;

ListNode *fast = head;
ListNode *slow = head;
while(fast && fast->next){
fast = fast->next->next;
slow = slow->next;
if(slow == fast) break;
}
if(fast != slow) return NULL;
fast = head;
while(fast != slow){
fast = fast->next;
slow = slow->next;
}
return fast;
}
};


以上是AC代码

还是利用双指针法:fast slow 两指针

这道题的关键是要明白:

如果有环的话: //以下结论的证明可以在网上搜一搜

首先fast和slow两个指针一定会相遇!!

第一次相遇之后,退出循环,记录相遇时的slow指针 然后把fast 指针重新放回链表开头

第二次相遇时,就是环的入口 然后返回入口节点即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: