小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
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) 未使用额外空间
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。