class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        // 这里因为算法时间要求,用的是暴力解法,用的是双指针。
        // 保持慢指针每移动一步,快指针从慢指针的下一个一直移动到链表的尾部
        ListNode* slow = head;
        ListNode* fast = head->next;
        ListNode* pre = head;
        ListNode* NewHead = new ListNode(0);
        NewHead->next = slow;
        while(slow){//控制慢指针
            pre = slow;  // 记录快指针的前一个
            fast = slow->next;//每次把快指针重置为慢指针的下一个
            while(fast){// 控制快指针
                if(slow->val == fast->val){
                    ListNode* temp = fast->next;
                    fast = nullptr;
                    pre->next = temp;// 前一个指针直接跳过当前指针,指向当前指针的下一个
                    fast = temp;
                }else {
                    pre = fast; // 移动指针
                    fast = fast->next; // 移动指针
                }
            }
            slow = slow->next; // 移动指针
        }
        return NewHead->next;
    }
};