# 142.环形链表II

## 问题描述
[142.环形链表II](https://leetcode.cn/problems/linked-list-cycle-ii/)

## 解题思路
判断是否链表是否存在环的方式与[141.环形链表](https://zwyyy456.vercel.app/zh/posts/tech/linked-list-cycle/)一致，当两个指针相遇时，再让一个指针从虚拟头节点开始一个节点一个节点的遍历，`slow`指针也是，两个指针会在环的入口处相遇。

## 代码
```cpp
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;
    }
};
```

