Linked List Cycle II My Submissions Question
Total Accepted: 59621 Total Submissions: 189735 Difficulty: Medium
Given a linked list, return the node where the cycle begins. If there is no cycle, return null.
Note: Do not modify the linked list.
Follow up:
Can you solve it without using extra space?
Subscribe to see which companies asked this question
这是一道让我有一些些忧桑的题目
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
if(!head || !head->next) return NULL;
ListNode* f = head;
ListNode* s = head;
ListNode* p = head;
ListNode* m = NULL;
int flag = 0;
while(f->next && f->next->next){
s = s->next;
f = f->next->next;
if(s == f){
m = s;
flag = 1;
break;//注意不要忘记加break,
}
}
while(p->next && flag == 1){
if(m == p) break;//注意这个语句在的位置,如果放在递增语句后面会在[1,2](2->next = head)这里报错
p = p->next;
m = m->next;
}
return m;
}
};