- 常规删除思路
NT:中间结点好处理,都是一个公式,关键删除头结点可能要单独处理——>哨兵节点
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if(head==nullptr) return head;
ListNode *ptr=new ListNode();
ptr->next=head;
ListNode *cur=ptr;
while(cur->next!=nullptr)
{
if(cur->next->val==val)
{
cur->next=cur->next->next;
}else{
cur=cur->next;
}
}
return ptr->next;
}
};
- 递归写法
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if(head==nullptr) return nullptr;
head->next=removeElements(head->next,val);
return head->val==val?head->next:head;
}
};
- 先设置结束条件
- 删除,主要看的是这个元素的下一个是哪个,则递归对head->next分析;先递归到最后,确定好最后的null
- 处理当前,比较值看是返回自己还是返回下一个节点(即删除该结点)