LeetCode 203 移除链表元素

题目描述
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

示例 1:
LeetCode 203 移除链表元素

输入: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;
    }
};
上一篇:203. 移除链表元素


下一篇:203. 移除链表元素(三种思路:C现)