leetcode刷题-203移除链表元素

192 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

leetcode203-移除链表元素

前文

本文为菜鸟的刷题记录,仅用作笔记使用,并非最佳解决方案。

题目信息

给你一个链表的头节点 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 输出:[]

解题思路分析

解法1

本解法主要采用递归的思路进行处理。递归方法的内容设置为判断当前节点的val值是否与目标的val值一致,如果数值不一致,那么设置下一节点放入递归方法中,同时将当前节点返回。如果val值一致,那么设置下一节点放入递归方法中,同时直接返回下一节点。以此方式跳过当前节点,也就是进行了移除处理。要注意的是,节点需要进行空值判断。如果当前节点为null,则直接返回null,不进行下一轮的递归操作,不然会产生空指针异常问题。以此方式循环处理,直至链表结束,便可以移除所有满足条件的元素,返回新的链表。 代码如下:

public ListNode removeElements(ListNode head, int val) {
    if(head == null){
        return head;
    }
    if(head.val == val){
        head.next = removeElements(head.next,val);
        return head.next;
    }else{
        head.next = removeElements(head.next,val);
        return head;
    }
}

复杂度分析

  • 时间复杂度 o(n)
  • 空间复杂度 o(1) 未使用额外空间

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。