class Solution {
public:
ListNode* deleteDuplication(ListNode* head) {
//虚拟头结点的意义在于在整个链表前面加了一个新节点,并保证这个节点不会被删掉
auto dummy = new ListNode(-1); //因为可能会把头结点删掉,需要定义一个虚拟头结点dummy
dummy->next = head; //虚拟头结点的下一个节点才是真头结点
auto p = dummy; //p是局部变量,函数调用完后会自己消亡
while (p->next) {
auto q = p->next;
while (q && p->next->val == q->val) q = q->next;
if (p->next->next == q) p = p->next;
else p->next = q;
}
auto t = dummy->next;
delete dummy; //养成好习惯,用了new就一定要delete
return t;
}
};