链表-移除链表元素

75 阅读1分钟

移除链表元素

描述

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

image.png

分析

解法一(简单):就是链表的移除元素,找到需要删除的前置节点和后置节点,就能够完成删除 解法二:递归

解法

递归函数定义:

  • 输入:以链表节点node为头的链表
  • 输出:当前新的链表节点node
  • 处理逻辑:若当前元素是要被删除的节点,则返回node.next;若当前元素不是,则返回自身。
  • 中间逻辑:需要先拼接递归函数返回的链表之后再进行返回。

代码

 public ListNode removeElements(ListNode head, int val) {
        return doRemove(head, val);
    }
        public ListNode doRemove(ListNode node, int val) {
        if (node == null) {//若递归到链表尾部,直接返回null
            return null;
        }
        ListNode listNode = doRemove(node.next, val);//拿到后续移除完毕的链表,和当前节点进行拼接
        node.next = listNode;
        if (node.val == val) {//判断当前节点是不是需要删除的,若是,则返回node.next
            return  node.next;
        } else {
            return node;
        }

    }