Leetcode --- 203. 移除链表元素

题目描述

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

示例 1:

 示例

输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
输入:head = [7,7,7,7], val = 7
输出:[]

参考实现

方式1、使用递归实现 

    /**
     * 递归实现删除链表元素
     *
     * @param head
     * @param val
     * @return
     */
    public static ListNode removeElements(ListNode head, int val) {
        if (head == null) {
            return null;
        } else {
            head.next = removeElements(head.next, val);
            if (head.val == val) {
                return head.next;
            } else {
                return head;
            }
        }
    }

方式2、使用循环实现 

    /**
     * 循环删除链表元素
     *
     * @param head
     * @param val
     * @return
     */
    public static ListNode removeElementsxh(ListNode head, int val) {
        //声明虚拟节点
        ListNode dummy = new ListNode(val - 1);
        dummy.next = head;
        //复制出来
        ListNode prev = dummy;
        while (prev.next != null) {
            //满足删除条件进行删除
            if (prev.next.val == val) {
                prev.next = prev.next.next;
            } else {
                //不满足进行遍历
                prev = prev.next;
            }
        }
        return dummy.next;
    }

 

posted @ 2024-05-07 21:24  晓枫的春天  阅读(3)  评论(0编辑  收藏  举报