/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x): val(x), next(nullptr) {};
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @return ListNode类
*/
ListNode* deleteDuplicates(ListNode* head) {
// write code here
ListNode* hail = new ListNode(0);
hail->next = head;
ListNode* pre = hail;
ListNode* cur = head;
int cur_val = cur->val;
while(cur != nullptr){
if(cur->next == nullptr || (cur->next && cur->next->val != cur_val)){
pre->next = cur;
pre = cur;
cur = cur->next;
cur_val = cur->val;
}
else{
while(cur != nullptr && cur->val == cur_val){
cur = cur->next;
}
cur_val = cur->val;
}
}
pre->next = nullptr;
return hail->next;
}
};