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 if (!head || !head->next) return NULL;13 ListNode *slow = head, *fast = head;14 bool flag = false;15 while (fast && fast->next) {16 slow = slow->next;17 fast = fast->next->next;18 if (slow == fast) {19 flag = true;20 break;21 }22 }23 if (!flag) return NULL;24 fast = head;25 while (slow != fast) {26 slow = slow->next;27 fast = fast->next;28 }29 return slow;30 }31 };