首页 > 代码库 > Linked List Cycle II

Linked List Cycle II

Given a linked list, return the node where the cycle begins. If there is no cycle, return null.

Follow up:
Can you solve it without using extra space?

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; * 2*x+ind - x = c * x+ind = c * x = count - ind */class Solution {public:    ListNode *detectCycle(ListNode *head) {        ListNode *slow, *fast;        slow = fast = head;        int count = 0;        while(true){            if(slow==NULL || fast==NULL || slow->next==NULL || fast->next==NULL){                return NULL;            }            slow = slow->next;            fast = fast->next->next;            count++;            if(slow == fast){                //has a cycle                while(true){                    if(head == slow){                        return slow;                    }                    head = head->next;                    slow = slow->next;                }            }        }    }};

 

Linked List Cycle II