删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode* p=head;
ListNode* r;
if(p!=NULL){
//若第一个节点重复
while(p->val==val&&p!=NULL){
if(p->next!=NULL){
head=p->next;
delete p;
p=head;
}else{
delete p;
return NULL;
}
}
//处理完头部重复节点
while(p->next!=NULL){ //1->2->....
if(p->next->val==val){
if(p->next->next!=NULL){ //1->2->3->...
r=p->next;
p->next=r->next;
delete(r);
}else{ //1->2->NULL
delete(p->next);
p->next=NULL;
}
}else{ //1->3->4->...
p=p->next;
}
} //1->NULL
}
return head;
}
};