题目描述
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
示例 1:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
示例 2:
输入:head = [], val = 1
输出:[]
示例 3:
输入:head = [7,7,7,7], val = 7
输出:[]
递归解法:确定递归出口:当节点为空时,退出;每一次如果该节点的值等于val ,那么需要head 向后移动两位,否则移动一位即可。
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if(!head) return head;
head->next=removeElements(head->next,val);
return head->val==val?head->next:head;
}
};
定义了一个虚拟节点,因为该过程可能会操作到头节点,cur指向虚拟头节点,如果遇到cur->next 指向的节点值等于val,那么删除该节点,都在向下移动。
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode* dummpy=new ListNode(-1);
dummpy->next=head;
auto cur = dummpy;
while(cur->next)
{
if(cur->next->val==val)
{
cur->next=cur->next->next;
}
//else if(cur->next->val==val && !cur->next->next) cur->next=nullptr;
else cur=cur->next;
}
return dummpy->next;
}
};