该题比起普通删除链表,首先声明 这里head直接指整个链表 所以为了防止刚开始head就等于要删除元素的尴尬情况,需要设置一个虚拟节点
这里假设为bubble
也就是 listnode* bubble = new listnode(0);
记住最后返回的head 就是防止上述尴尬情况,需要重新设置 head = bubble->next
ac 代码如下:
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode* bubble = new ListNode(0);
bubble->next = head;
ListNode* p = head;
ListNode* pre = bubble;
while(p)
{
if(p->val == val)
{
pre->next = p->next;
delete(p);
p = pre->next;
}
else
{
pre = p;
p = p->next;
}
}
head = bubble->next;
delete(bubble);
return head;
}
};