class Solution {
public:
    ListNode* EntryNodeOfLoop(ListNode* pHead) {
        ListNode* slow = pHead;
        ListNode* fast = pHead;
        do
        {
            slow = slow->next;
            if (slow != nullptr)
                fast = fast->next->next;
            else
                return nullptr;
            if (fast == nullptr)
                return nullptr;
        } while (slow != fast);
        slow = pHead;
        while (slow != fast)
        {
            slow = slow->next;
            fast = fast->next;
        }
        return slow;
    }
};