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?
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode *detectCycle(ListNode *head) { 12 ListNode *slow = head,*fast=head; 13 14 while(fast&&fast->next) 15 { 16 slow=slow->next; 17 fast=fast->next->next; 18 19 if(slow==fast) 20 { 21 ListNode *slow2=head; 22 while(slow2!=slow) 23 { 24 slow2=slow2->next; 25 slow=slow->next; 26 27 } 28 return slow2; 29 } 30 } 31 return NULL; 32 33 } 34 };