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;
}
};