链表有环检测,多一个要求找出环的起点。
琢磨了一晚上,终于想出来了,挺开心的。
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode *detectCycle(ListNode *head) {
if(!head) return head;
ListNode *p1 = head, *p2 = head;
while (p2->next)
{
p1 = p1->next;
p2 = p2->next->next;
if(!p2 || p1 == p2)break;
}
if(p2 == NULL || p2->next == NULL)return NULL;
p2 = head;
while(p1 != p2){
p1 = p1->next;
p2 = p2->next;
}
return p1;
}