class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if(head == nullptr) return head;
ListNode *pre, *p;
while(head != nullptr && head->val == val){
p = head;
head = head->next;
delete p;
}
pre = head;
p = head;
if(head != nullptr) head = head->next;
while(head != nullptr){
if(head->val == val){
head = head->next;
delete pre->next;
pre->next = head;
}
else{
head = head->next;
pre = pre->next;
}
}
return p;
}
};