力扣203(java&python)-移除链表元素(简单)
题目:
给你一个链表的头节点 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
输出:[]
提示:
- 列表中的节点数目在范围 [0, 104] 内
- 1 <= Node.val <= 50
- 0 <= val <= 50
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-linked-list-elements
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
添加一个虚拟头结点,并把虚拟头结点的下一个结点指向原始的头结点,在当前结点后还有结点的情况下,遍历并删除val的结点,最后返回虚拟头结点的下一个结点即可。
具体的遍历删除方法为:
- 定义一个虚拟结点,并指向原链表的头结点;
- 定义当前结点cur并初始化为虚拟头结点;
- 当前结点后还有结点时,进行遍历,当当前结点的下一个结点是待删除的结点时,就将当前节点指向它下一结点的下一结点(删除当前结点的下一结点),否则右移当前结点到当前结点的下一结点;
- 最后返回虚拟结点的下一个结点即可。
注意:
1.cur.next.val == val,而不是cur.next = val?
val表示的是一个值,cur.next表示的是cur的下一个结点的地址,而cur.next.val 表示的是下一个结点的值,题目要求的是删除链表中给定值的结点,应该是值与值进行比较,而不应该是结点地址与值进行比较。
2.最后返回的是 dummyHead.next,而不是cur.next?
最开始将虚拟结点dummyHead赋值给cur,但是后续遍历过程中cur一直在移动,导致最后遍历完链表时,cur指向的是链表末尾的那个结点,而dummyHead没有移动。
java代码:
1 /**
2 * Definition for singly-linked list.
3 * public class ListNode {
4 * int val;
5 * ListNode next;
6 * ListNode() {}
7 * ListNode(int val) { this.val = val; }
8 * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
9 * }
10 */
11 class Solution {
12 public ListNode removeElements(ListNode head, int val) {
13 //定义一个虚拟结点,并指向原链表的头结点
14 ListNode dummyHead = new ListNode(0, head);
15 //定义当前结点cur并初始化为虚拟头结点
16 ListNode cur = dummyHead;
17 //当前结点后还有结点
18 while(cur.next != null){
19 //当前结点的下一个结点是待删除的结点
20 if(cur.next.val == val){
21 //将当前节点指向它下一结点的下一结点(删除当前结点的下一结点)
22 cur.next = cur.next.next;
23 }else{
24 //右移当前结点到当前结点的下一结点
25 cur = cur.next;
26 }
27 }
28 //返回头结点是虚拟节点的下一个
29 return dummyHead.next;
30 }
31 }

Python3:
1 # Definition for singly-linked list.
2 # class ListNode:
3 # def __init__(self, val=0, next=None):
4 # self.val = val
5 # self.next = next
6 class Solution:
7 def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
8 dummyHead = ListNode(0, head)
9 cur = dummyHead
10 while cur.next:
11 if cur.next.val == val:
12 cur.next = cur.next.next
13 else:
14 cur = cur.next
15 return dummyHead.next

小知识:
初始化链表:
①初始化一个空节点,初始赋值为0,指针指向为list;
ListNode list = new ListNode(0);
②初始化一个空节点,初始赋值为0,并且list的下一个next指针指向head,指针指向为list;(通常定义一个空节点还需要有节点的next指针指向,否则只是定义一个空节点)
ListNode list = new ListNode(0,head);
或者
ListNode list = new ListNode(0);
list.next=head;
③定义一个空链表
ListNode list=null;
力扣203(java&python)-移除链表元素(简单)的更多相关文章
- 力扣(LeetCode)移除链表元素 个人题解
删除链表中等于给定值 val 的所有节点. 这题粗看并不困难,链表的特性让移除元素特别轻松,只用遇到和val相同的就跳过,将指针指向下一个,以此类推. 但是,一个比较麻烦的问题是,当链表所有元素都和v ...
- Java实现 LeetCode 203 移除链表元素
203. 移除链表元素 删除链表中等于给定值 val 的所有节点. 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2 ...
- 【LeetCode】203.移除链表元素
203.移除链表元素 知识点:链表:双指针 题目描述 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 . 示例 ...
- 力扣(LeetCode)删除排序链表中的重复元素II 个人题解
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 思路和上一题类似(参考 力扣(LeetCode)删除排序链表中的重复元素 个人题解)) 只不过这里需要用到一个前 ...
- [LeetCode] 203. 移除链表元素(链表基本操作-删除)、876. 链表的中间结点(链表基本操作-找中间结点)
题目 203. 移除链表元素 删除链表中等于给定值 val 的所有节点. 题解 删除结点:要注意虚拟头节点. 代码 class Solution { public ListNode removeEle ...
- Leecode刷题之旅-C语言/python-203移除链表元素
/* * @lc app=leetcode.cn id=203 lang=c * * [203] 移除链表元素 * * https://leetcode-cn.com/problems/remove- ...
- 移除链表元素&反转链表&设计链表
一.移除链表元素 203.移除链表元素 leetcode链接 1.方法概述 带傀儡节点的方法: 创建一个傀儡节点puppet来充当该链表的假头节点,当真正的头结点head不为null时,且在真正的头节 ...
- 代码随想录训练营day 4|链表基础理论,移除链表元素,设计链表,反转链表
链表理论基础 链表是一种由指针串联在一起的线性结构,每一个节点都由一个数据域和一个指针域组成. 链表的类型有:单链表.双链表.循环链表. 链表的存储方式:在内存中不连续分布. 链表的定义很多人因为不重 ...
- [LeetCode] Remove Linked List Elements 移除链表元素
Remove all elements from a linked list of integers that have value val. Example Given: 1 --> 2 -- ...
- 力扣——Linked List Cycle(环形链表) python实现
题目描述: 中文: 给定一个链表,判断链表中是否有环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 -1,则在该链表中没有环. ...
随机推荐
- shell脚本中将 IFS (Internal Field Separator 内部字段分隔符)替换为换行符
将 IFS 中的空白符(换行.制表符.空格)修改为仅包含换行 IFS 是shell中的内部变量,在使用 for var in var_list;do use $var do something don ...
- 5G+实时云渲染,助力虚拟仿真实训教学升级
随着新冠疫情走向全球大流行的发展趋势,学校教育被迫迁徙到线上教学平台,供需平衡被打破,疫情让"在线教学"成为"口罩式的刚需". 我们看到互联网+教育带来便利的同 ...
- Retrofit源码分析
目录介绍 1.首先回顾Retrofit简单使用方法 2.Retrofit的创建流程源码分析 2.1 Retrofit对象调用Builder()源码解析 2.2 Retrofit对象调用baseUrl( ...
- springboot 低于 2.6 版本设置 SameSite=None,springboot 1.x set SameSite=none in embedded tomcat
speingboot 使用自带的 tomcat 运行,设置 SameSite. springboot 过低的版本没有 SameSite 的属性设置,升级到 1.5.22 版本后,虽然 Rfc6265C ...
- MindSponge分子动力学模拟——自建力场(2024.03)
技术背景 在MindSponge教程合集中我们已经介绍了很多使用MindSponge进行分子动力学模拟的方法,这里主要介绍在MindSponge中自定义一个力场.在传统的MD软件中,如果你希望去开发一 ...
- Java字符串比较 == 和 equals方法的区别
今天在排除一个bug的时候出现了一个很低级但是也很容易被忽视的错误,在此写了一个小例子做记录. 首先我先说一下错误的场景,我读取了一段json数据,并使用JSONObject的实例对象的getStri ...
- 13 JavaScript关于prototype(超重点)
13 JavaScript关于prototype(超重点) prototype是js里面给类增加功能扩展的一种模式. 写个面向对象来看看. function People(name, age){ th ...
- #根号分治,前缀和,双指针#CF1446D2 Frequency Problem (Hard Version)
题目 给定一个长度为 \(n\) 的序列,问是否存在一个最长的区间使得至少存在两个众数. 分析 实际上 Easy Version 是用来启发大于根号的做法的. 众数可以说有一个性质吧,答案区间中的其中 ...
- #二分,负环#JZOJ 3852 单词接龙
题目 只要一个单词的最后两个字母和另一个单词的前两个字母相同,那么这两个单词就可以有序的连接起来.给出\(n\)个单词组成单词环,求所有环的环中单词平均长度最大值. 分析 二分答案,判断是否存在正环( ...
- 2023 OpenHarmony年度运营报告