有了上一篇的基础,做这一篇会相对容易些,没看上一篇的一定要去看看再来。
先看题:

解题图解:
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;
- }