题意
判断给出的链表中是否包含环,如果有的话返回环的起始点,否则返回null。如下环起始位置为c
a->b->c->d
↑ ↓
f<-e
思路
双指针一个一次一步,一个一次两步可以进入环中,但问题在于如何找到环的起始位置,下面是从讨论版找到的图,可以参考一下:

代码
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
if (!head || !(head->next))
return nullptr;
ListNode *p, *q;
p = head->next, q = head->next->next;
while (p != q) {
if (!p || !q || !(q->next))
return nullptr;
p = p->next, q = q->next->next;
}
p = head;
while (p != q)
p = p->next, q = q->next;
return p;
}
};
6463

被折叠的 条评论
为什么被折叠?



