1 题目描述

2 解题思路

2.1 循环判断

先特判链表为空/只有一个元素的情况。

然后循环判断,如果下一个值等于val,那么就把当前位置的next再往后挪一个;如果值不等于val,向后推进一个。

但这样的话第一个元素没有判断过,需要特判。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def removeElements(self, head: ListNode, val: int) -> ListNode:if(head==None):return None#先判断列表为空的情况if(head.next==None):if(head.val==val):return Noneelse:return head#列表只有一个元素的情况ret=headwhile(head!=None and head.next!=None):if(head.next.val==val):head.next=head.next.nextelse:head=head.next#循环判断链表第二个值及之后的值if(ret.val==val):return ret.nextelse:return ret#特判第一个值

2.2  哨兵节点

如果删除的节点是中间的节点,则问题似乎非常简单:

->选择要删除节点的前一个结点 prev。

->将 prev 的 next 设置为要删除结点的 next。

但当要删除的一个或多个节点位于链表的头部时,事情会变得复杂。

我们可以通过哨兵节点去解决它,哨兵节点广泛应用于树和链表中,如伪头、伪尾、标记等

它们是纯功能的,通常不保存任何数据,

其主要目的是使链表标准化,如使链表永不为空、永不无头、简化插入和删除。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def removeElements(self, head: ListNode, val: int) -> ListNode:tmp=ListNode(val=0,next=head)#设置哨兵节点print()ret=tmp#复制一个哨兵节点(因为tmp会一直向后走)while(tmp.next!=None):#tmp.next当前位置的下一个值(就是我们要和val比较的值——if(tmp.next.val==val):tmp.next=tmp.next.nextelse:tmp=tmp.next#因为可能连续几个val,所以这里并不是每一次遍历,tmp都要赋值成tmp.nextreturn ret.next

文巾解题 203. 移除链表元素相关推荐

  1. LeetCode-链表-203. 移除链表元素

    描述 203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 . 示例 1: 输入:head ...

  2. LeetCode Algorithm 203. 移除链表元素

    203. 移除链表元素 Ideas 这题其实很简单,从头开始遍历,只要遇到node->val==val的通通删除就OK了. Code C++ class Solution {public:Lis ...

  3. Suzy找到实习了吗Day 3 | 链表开始啦 203移除链表元素 707设计链表 206 反转链表

    定义链表的结构 class ListNode:def __init__(self, val, next=None): #构造函数self.val = valself.next = next 尾部nod ...

  4. 203. 移除链表元素 力扣 c语言

    203. 移除链表元素 难度简单843 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 . 方法1 迭代 也可 ...

  5. Java实现 LeetCode 203 移除链表元素

    203. 移除链表元素 删除链表中等于给定值 val 的所有节点. 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2 ...

  6. json移除一个元素_leetcode:203.移除链表元素,听说用虚拟头节点会方便很多?

    链表操作中,可以使用原链表来直接进行删除操作,也可以设置一个虚拟头结点在进行删除操作,接下来看一看哪种方式更方便. ❞ 第203题:移除链表元素 题意:删除链表中等于给定值 val 的所有节点. 思路 ...

  7. 文巾解题 27. 移除元素

    1 题目描述 2 解题思路 一般来说,原地修改指针的题目,都是快慢指针来实现的. 2.1 传统快慢指针 时间复杂度:O(n),其中 n 为序列的长度.我们需要遍历该序列至多两次. 空间复杂度:O(1) ...

  8. LeetCode 203 移除链表元素 HERODING的LeetCode之路

    给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 . 示例 1: 输入:head = [1,2,6,3,4,5, ...

  9. 文巾解题 82. 删除排序链表中的重复元素 II

    1 题目描述 2 解题思路 由于给定的链表是排好序的,因此重复的元素在链表中出现的位置是连续的,因此我们只需要对链表进行一次遍历,就可以删除重复的元素. 由于链表的头节点可能会被删除,因此我们需要额外 ...

最新文章

  1. 详解 Tomcat 的连接数与线程池
  2. 【转载】Pytorch在加载模型参数时指定设备
  3. 0x80070659系统策略禁止这个安装 vc_教你一招,解决所有系统丢失DLL文件的问题!...
  4. 交流电的有效值rms值_交流电路中的电源
  5. 把 14 亿中国人民都拉到一个微信群里在技术上能实现吗?
  6. Django 【第十九篇】JS实现的ajax、同源策略和前端JSONP解决跨域问题
  7. 开关管三极管和MOS管的选择
  8. Ubuntu系统多屏幕时 触摸屏如何分屏定位
  9. 关于调整我省高等教育自学考试计算机及应用等五个专业计划的通知,关于2008年我省高等教育自学考试计算机及应用等五个专业考生执行专业考试计划有关问题的通知...
  10. loadrunner11中文版破解文档+录制脚本(图/文)
  11. IT专用英语词汇1500词
  12. 阿克曼函数实现(Java代码)
  13. win10专业版修改家庭计算机,win10家庭版升级专业版的最完美的方法_win10专业版技巧...
  14. java 定时为每月10号_Java定时器的cron设置详解Quartz
  15. H5获取用户code,换openID
  16. 【高速接口-RapidIO】5、Xilinx RapidIO核例子工程源码分析
  17. excel里的一个单元格怎样拆分成几个单元格?
  18. np.arange函数的使用
  19. 存放在电脑中的文件丢失了怎么恢复
  20. python 机器学习 sklearn 朴素贝叶斯

热门文章

  1. [Swift]UIKit学习之UISegSmentedControl的用法
  2. 详细解析Java中抽象类和接口的区别
  3. 二、lvm条带化的概念
  4. 爱心志愿者义工俱乐部公告
  5. win10系统上抓包网卡的驱动总是失效怎么办?
  6. Eclipse for Android 开发环境搭建及各种坑
  7. Linux开发中 MD5值的计算
  8. java中正则表达式函数_java正则表达式PHP中的正则表达式函数介绍
  9. spring boot第二讲
  10. viterbi算法_HMM模型和Viterbi算法如何应用于分词