居然是所有的重复元素都要删除,那么检查每个结点时自然需要站在其前一个的视角,因此我们首先创建一个哑结点。
对于任何结点,检查它是否和它的下一个数值相等,相等的话这一整条都跳过,不更新链表。
不相等的话更新prev即可。
记住每次让正在构建的链表尾部指向空,因为只是单纯指向一个结点的话,它后续的结点也会一起带过来。
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode dummy(0);
ListNode* prev = &dummy;
while (head) {
bool f=false;
while (head->next&&head->next->val ==head->val) {
f=true;
head=head->next;
}
if (!f) {
prev->next=head;
prev=head;
}
head=head->next;
prev->next =nullptr;
}
return dummy.next;
}
};

京公网安备 11010502036488号