
// /**
// * 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* p1 = head;
ListNode* p2 = head;
while(p1&&p2&&p2->next){
p1 = p1->next;
p2 = p2->next->next;
if(p1==p2)
break;
}
// if(p1==NULL||p2==NULL)
// return NULL;
if(p2==NULL||p2->next==NULL)
return NULL;
p1 = head;
while(p1&&p2&&p1!=p2){
p1 = p1->next;
p2 = p2->next;
}
return p1;
}
};