有了上一篇的基础,做这一篇会相对容易些,没看上一篇的一定要去看看再来。
先看题:
解题图解:
1.首先要使快慢指针相遇
2.
代码如下:
struct ListNode *detectCycle(struct ListNode *head) {
struct ListNode * fast=head;
struct ListNode * low=head;
while(fast!=NULL&&fast->next!=NULL){
low=low->next;
fast=fast->next->next;
if(low==fast){
break;
}
}
if(fast==NULL||fast->next==NULL)return NULL;
low=head;
while(fast!=low){
low=low->next;
fast=fast->next;
}
return fast;
}