先创建一个哑结点,用prev指针指向它,方便后续操作。如果head有下一个结点,且二者值相同,我们就一直往后走,出来之后head指向下一个,prev的下一个暂时指向空,如果这个过程没有发生,说明这个值没有重复,prev的下一个指向head,prev更新为head。
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号