原题链接
原本以为可以用链表的一般操作解决,试了好多都不行,能想到的基本复杂度比较高。题目评论中最好的答案就是快慢指针的方法,但是描述的都不够清楚,看B站老哥的视频茅厕顿开。
继续努力,我们都有光明的未来!
贴出代码:
/**
* 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 *fast = head, *slow = head;
while(fast){
fast = fast->next;
slow = slow->next;
if(!fast) return NULL;
else fast = fast->next;
if(fast == slow) break;
}
if(!fast) return NULL;
fast = head;
while(fast != slow){
fast = fast->next;
slow = slow->next;
}
return fast;
}
};