方法一:
迭代:
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if(head==nullptr)
return head;
ListNode *l1 = new ListNode(0,head);
ListNode *l2 = l1;
while(l1->next!=nullptr)
{
if(l1->next->val==val)
{
l1->next = l1->next->next;
}
else
l1=l1->next;
}
return l2->next;
}
};
注意,如果不在堆上定义这个链表指针,他无法将next指向head。
方法二:
递归。边缘条件:当指针为null时,说明已经到了最后一个,然后开始向前判定,若指针的值等于val,则删除最后一个指针,若不是,则返回当前指针。
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if(head==nullptr)
return head;
head->next = removeElements(head->next,val);
return head->val==val ?head->next:head;
}
};