摘自本人之前博客:
/**
* 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) {
//runtime error :你的程序中可能出现了数组越界的情况。这件事可能会导致内存访问错误
//map<int,int >buf;
if(head==NULL) return NULL;
ListNode*prev=head;
ListNode*p=head->next;
//ListNode*next=p->next; //不要加这句,因为p->next有可能不存在,如整个链表只有两个元素的时候。
while(p!=NULL)
{
if(p->val!=val)
{
prev=p;
p=p->next;
}
else
{
ListNode*Tmp =p->next;
prev->next=Tmp;
p=prev->next;
}
}
if(head->val==val) //最后当head的val值正好和val值相同时,只需要将头指针往后移一位就好。注意不能返回空值,否则就出错了!
{
ListNode*Tmp=head->next;
head=Tmp;
}
return head;
}
};