目录
解法
思路
为什么两指针一定会相遇
代码
typedef ListNode* Lp;
class Solution {
public:
Lp detectCycle(Lp head) {
Lp pre_head = new ListNode(0);
pre_head->next = head;
Lp fst(pre_head), slw(pre_head), _slw(pre_head);
do {
if (fst->next == NULL || fst->next->next == NULL) return NULL;
fst = fst->next->next;
slw = slw->next;
} while (slw != fst);
while (slw != _slw) {
slw = slw->next;
_slw = _slw->next;
}
return slw;
}
};
运行结果