问题描述 链接到标题
解题思路 链接到标题
判断是否链表是否存在环的方式与141.环形链表一致,当两个指针相遇时,再让一个指针从虚拟头节点开始一个节点一个节点的遍历,slow
指针也是,两个指针会在环的入口处相遇。
代码 链接到标题
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
ListNode *vhead = new ListNode(0, head);
ListNode *fast = vhead, *slow = vhead;
while (fast != nullptr && fast->next != nullptr) {
fast = fast->next->next;
slow = slow->next;
if (fast == slow) {
while (vhead != slow) {
vhead = vhead->next;
slow = slow->next;
}
delete vhead;
return slow;
}
}
return nullptr;
}
};