当前位置: 首页 > news >正文

【算法|虚拟头节点|链表】移除链表元素

Leetcode203

移除链表元素

题目描述:

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

示例 1:

img

输入: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. 头节点为我们要移除的元素
  2. 非头结点为我们要移除的元素

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Java版本

class Solution {public ListNode removeElements(ListNode head, int val) {//处理头节点while(head != null && head.val == val){head = head.next;} //处理头节点为空的情况if(head == null){return head;}//确保head.val != val 的情况ListNode pre = head;ListNode cur = head.next;while(cur != null){if(cur.val == val){pre.next = cur.next;}else{pre = cur;}cur = cur.next;}return head;}
}
class Solution {public ListNode removeElements(ListNode head, int val) {while(head != null && head.val == val){head = head.next;}ListNode cur = head;while(cur != null){while(cur.next != null && cur.next.val == val){cur.next = cur.next.next;}cur = cur.next;}return head;}
}

C++版本

class Solution {
public:ListNode* removeElements(ListNode* head, int val) {//删除头节点while(head != NULL && head->val == val){ListNode* tmp = head;head = head->next;delete tmp;}//删除非头结点ListNode* cur = head;while(cur != NULL && cur->next != NULL){if(cur->next->val == val){ListNode* tmp = cur->next;cur->next = cur->next->next;delete tmp;}else{cur = cur->next;}}return head;}
};

虚拟头节点

介绍

虚拟头节点是一种在链表中使用的特殊节点,它通常作为头节点的前一个节点,但是不存储具体的数据。它的目的是为了简化链表的操作,特别是在处理边界条件和插入、删除操作时提供便利。

在传统的链表实现中,如果要对链表进行插入或者删除操作,我们需要分别处理头节点的情况和中间节点的情况。这样就需要额外的代码来处理这些边界情况,增加了代码的复杂度。

而使用虚拟头节点,我们可以将这些特殊情况都统一为对中间节点的操作。具体来说,虚拟头节点就像是链表中的一个普通节点,但是它不存储具体的数据。当链表为空时,虚拟头节点就是唯一的节点,它的下一个节点就是链表的真正的头节点。当链表非空时,虚拟头节点的下一个节点就是链表的真正的头节点。

插入操作时,我们只需要将新节点插入到虚拟头节点的后面即可,而不需要单独处理头节点为空的情况。删除操作时,我们只需要将虚拟头节点的后继节点指向要删除的节点的后继节点即可,而不需要单独处理删除头节点的情况。

使用虚拟头节点的好处是简化了链表的操作逻辑和代码,让代码更加简洁和可读。同时,它也保证了链表的头节点和其他节点的统一性,避免了对头节点的特殊处理。

总结起来,虚拟头节点是一个不存储具体数据的特殊节点,它位于真正的头节点之前,用于简化链表的操作和处理边界情况。它统一了对头节点和其他节点的操作,使得代码更加简洁和可维护

所以当我们在原链表操作时,我们需要针对每一种情况去编写逻辑,但使用虚拟头结点的话,就可以统一移除节点这一操作~

Java版本

class Solution {public ListNode removeElements(ListNode head, int val) {ListNode dummyHead = new ListNode(-1);dummyHead.next = head;ListNode pre = dummyHead;while(pre.next != null){if(pre.next.val == val){pre.next = pre.next.next;}else{pre = pre.next;}}return dummyHead.next;}
}

相关文章:

【算法|虚拟头节点|链表】移除链表元素

Leetcode203 移除链表元素 题目描述: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出&#xf…...

express静态路由匹配引发的404错误

最近有一个react项目,我用webpack打包,然后使用express作为webserver跑起来。 但是在运行的时候,就白屏了,看console原来是报了404错误 可是代码里面明明有路由定义,为什么还是报404错误呢? app.get("…...

VHOST-SCSI代码分析(4)VHOST KICK机制

在VIRTIO框架中虚拟机通知QEMU数据准备好是通过操作MMIO,在KVM中将操作分发到QEMU中,由QEMU中模拟对应的MMIO操作(图中红色部分)。 VHOST框架虚拟机通知HOST内核数据准备好也是通过MMIO操作,但在函数vhost_dev_enable_…...

Docker Volume(存储卷)

文章目录 Docker Volume(存储卷)1.什么是存储卷?2.为什么需要存储卷?3. 存储卷的分类1) 管理卷Volume方式一:Volume命令操作方式二: -v 或者--mount 指定方式三: Dockerfile 匿名卷小结Docker 卷生命周期Docker 卷共享…...

【毕设选题】opencv 图像识别 指纹识别 - python

文章目录 0 前言1 课题背景2 效果展示3 具体实现3.1 图像对比过滤3.2 图像二值化3.3 图像侵蚀细化3.4 图像增强3.5 特征点检测 4 OpenCV5 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往…...

阿里云无影云电脑使用初体验:真的好用吗?

阿里云无影云电脑即无影云桌面,云桌面如何使用?云桌面购买后没有用户名和密码,先创建用户设置密码,才可以登录连接到云桌面。云桌面想要访问公网还需要开通互联网访问功能。阿里云百科来详细说下阿里云无影云电脑从购买、创建用户…...

无涯教程-JavaScript - FLOOR.MATH函数

描述 FLOOR.MATH函数将数字四舍五入到最接近的整数或最接近的有效倍数。 语法 FLOOR.MATH (number, significance, mode)争论 Argument描述Required/OptionalNumberThe number to be rounded down.RequiredSignificanceThe multiple to which you want to round.OptionalMo…...

Dubbo3基础使用

1、Dubbo概述 现在SpringCloud Alibaba比较火,用的比较多是吧,那dubbo是不是过时的呢? 并不是的,以前有人把Dubbo和SpringCloud进行对比,其实两者是不同维度的,不能对比,dubbo就是一个rpc框架&…...

Android 图片加载框架Glide源码详解

我们看Glide的源码从Glide类入手,使用的时候我们先调用的with方法,源码中with有3个多载的方法:下图翻译过来就是activity用FragmentActivity Applicationcontext用 with(Context)还有一个with(View)的 殊途…...

知识竞赛活动舞台搭建需要多少钱

知识竞赛活动舞台搭建的费用会根据不同的竞赛活动规模和要求而有所不同。对于小型的知识竞赛活动,如学校内部组织的知识竞赛或社区的知识竞赛活动,舞台搭建的费用往往相对较低。在这种情况下,可能只需要一些简单的装饰和道具,例如…...

07set注入级联属性和特殊字符及表达式语言

级联属性赋值(了解) 概述 级联属性赋值就是给某个对象属性的属性赋值,就是给对象关联的对象的属性赋值 Clazz班级类 public class Clazz {private String name;public Clazz() {}public Clazz(String name) {this.name name;}//set和get方法以及toString方法 }Student有cl…...

用AI在小红书做早教启蒙,2个月涨粉11.7万,获赞10万的新流量玩法

本期是赤辰第29期AI项目教程,底部准备了9月粉丝福利,可以免费领取。母婴、教育一直以来是最不缺流量的两大“真香”赛道。那么AI时代下有怎样新流量红利和玩法?接下来就给大家拆解一个在小红书上做AI绘画启蒙早教资源变现的新玩法&#xff01…...

Recommender Systems in the Era of Large Language Models (LLMs)

本文是LLM系列文章,针对《Recommender Systems in the Era of Large Language Models (LLMs)》的翻译。 大语言模型时代的推荐系统 摘要1 引言2 相关工作3 基于LLM推荐系统的深度表示学习4 预训练和微调LLM用于推荐系统5 提示LLM用于推荐系统6 未来方向6.1 幻觉缓解…...

红心向阳 百鸟朝凤

背景 最近在玩 folium 模块,基于使用过程中的一些个人体验,对 folium 进行了二次封装,开源在 GpsAndMap.在使用的过程中,发现在地图上打图标是可以进行旋转的。遇到就发现了一些有意思的玩法。 隔海的相望 下面的代码在地图 厦…...

C语言自己实现一个memcpy函数

目录 按字节拷贝实现memcpy按4字节拷贝实现memcpyTips 在 C 语言中&#xff0c;我们可以自己实现 memcpy 函数来实现内存数据的拷贝操作。memcpy 函数用于将指定长度的数据从源地址复制到目标地址。 按字节拷贝实现memcpy #include <stdio.h>void* my_memcpy_byte(void*…...

C#教师考勤管理系统asp.net+sqlserver

3.3.1 员工部分 1&#xff1a;请假管理&#xff1a;包括填写请假条&#xff0c;提交申请&#xff0c;查看审批&#xff0c;审核请假等等。 2&#xff1a;考勤管理&#xff1a;针对具体的员工考勤的统计等管理。 3&#xff1a;个人资料管理&#xff1a;进行个人信息管理&#xf…...

Nginx代理配置详解

一、什么是代理 1、正向代理(forward proxy) 正向代理&#xff0c;简单的说就像是一个跳板&#xff0c;它隐藏了真实的请求客户端&#xff08;IP&#xff09;&#xff0c;服务端不知道真实的客户端是谁&#xff0c;客户端请求的服务都由代理服务器来代替请求。 举个例子来说…...

DAG 的深度优先搜索标记

/**\ | DAG 的深度优先搜索标记 | INIT: edge[][] 邻接矩阵 ; pre[], post[], tag 全置 0; | CALL: dfstag(i, n); pre/post: 开始 / 结束时间 \**/ int edge[V][V], pre[V], post[V], tag; void dfstag( int cur, int n) { // vertex: 0 ~ n-1 pre[cur] tag; for…...

网络存储解决方案:选择与配置

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

java中BigDecimal除法运算指定小数点保留位数和取舍规则

java中使用BigDecimal进行相除运算时&#xff0c;为了避免抛出ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result。最好指定小数点保留位数和取舍规则。 取舍规则 ROUND_CEILING: 舍位时向正无穷方向取值。即&#xff1a;向上取…...

车联网远程监控管理提升车辆调度效率,实现高效运营

随着智慧城市建设与物联网技术发展&#xff0c;车辆使用4G工业路由器网络实现车联网&#xff0c;并对车上视频监控、GPS定位以及温湿度传感器等信息进行数据采集和实时传输。这些数据的采集和监测将通过4G网络上传到管理平台&#xff0c;为车辆调度和运行效率的优化提供了有力的…...

数据治理-数据建模和设计

定义 发现、分析和确定数据需求的过程&#xff0c;用一种称为数据模型的精确形式表示和传递这些数据需求。过程是循环迭代的&#xff0c;可能包括概念、逻辑和物理模型。 常见的6种数据模型 关系模式、多维模式、面向对象模式、事实模式、时间序列模式、NoSQL模式。根据描述详…...

博客系统(升级(Spring))(四)(完)基本功能(阅读,修改,添加,删除文章)(附带项目)

博客系统 (三&#xff09; 博客系统博客主页前端后端个人博客前端后端显示个人文章删除文章 修改文章前端后端提取文章修改文章 显示正文内容前端后端文章阅读量功能 添加文章前端后端 如何使用Redis项目地点&#xff1a; 博客系统 博客系统是干什么的&#xff1f; CSDN就是一…...

常用的辅助类(必会)

1.CountDownLatch package com.kuang.add;import java.util.concurrent.CountDownLatch;//计数器 减法 public class CountDownLatchDemo {public static void main(String[] args) throws InterruptedException {//总数是6&#xff0c;必须要执行任务的时候&#xff0c;再使用…...

Java常用类之 String、StringBuffer、StringBuilder

Java常用类 文章目录 一、字符串相关的类1.1、String的 不可变性1.2、String不同实例化方式的对比1.3、String不同拼接操作的对比1.4、String的常用方法1.5、String类与其他结构之间的转换1.5.1、String 与基本数据类型、包装类之间的转换1.5.2、String 与char[]的转换1.5.3、…...

linux在所有文件中查找某一个字符串

linux在所有文件中查找某一个字符串 有时候我们需要在大量文件中查找某一个字符串&#xff0c;手工一个一个打开文件查找非常耗时&#xff0c;我们可以使用 find 和 xargs 两个命令来实现查找指定字符串。 命令详解 find <directory> -type f -name "*.c" |…...

WebSocket vs SSE: 实时数据推送到前端的选择与实现(详细)

Websocket和Server-Sent Events 对比推送数据给前端及各自的实现 二者对比WebSocket&#xff1a;Server-Sent Events (SSE)&#xff1a;选择 WebSocket 还是 SSE&#xff1a; Websocket 实现使用原生 WebSocket API&#xff1a;使用 Netty 创建 WebSocket&#xff1a;总结和选择…...

Redis从入门到精通(二:数据类型)

数据存储类型介绍 Redis 数据类型&#xff08;5种常用&#xff09; string hash list set sorted_set/zset&#xff08;应用性较低&#xff09; redis 数据存储格式 redis 自身是一个 Map&#xff0c;其中所有的数据都是采用 key : value 的形式存储 数据类型指的是存储的数据…...

基于SSM的珠宝首饰交易平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

4款视频号数据分析平台!

很多人在做视频号的时候就会有创作参考的需求&#xff0c;那么你们知道视频号中有哪些数据平台&#xff1f;今天就和大家来分享一下 接下来就总结一下视频号数据平台有哪些&#xff1f;排名不分前后。 1&#xff1a;视频号助手&#xff08;channels.weixin.qq.com&#xff09…...

福州做商城网站公司/建站企业网站

最近公司的项目很多&#xff0c;研发那里需要的测试环境很多&#xff0c;而且基本都是lnmp的测试环境&#xff08;也有apache与tomcat,但非常少&#xff09;&#xff0c;测试没有问题之后还需要上线&#xff0c;所以最近我很忙&#xff0c;而且都是重复性的工作&#xff0c;本来…...

公司网站建设需要提供什么材料/百度输入法

需求是催生项目和推进项目的不竭动力。 背景&#xff1a; 最近&#xff0c;因为媳妇要做个B超检查&#xff0c;想着去大医院查查应该更放心&#xff0c;所以就把目标瞄准在A医院。早已耳闻A院一号难求万人空巷&#xff0c;所以把所有能接触到的机会都看了一遍&#xff0c;线下听…...

佛山设计论坛/优化设计七年级上册语文答案

Node.getTextContent()是org.w3c.dom.Node下面的方法&#xff0c;这个包是JDK自带的&#xff0c;这所以会出现getTextContent找不到是因为jar包的冲突&#xff0c;是由xml-api.jar这个包的冲突引起的。我的工程里没有使用xml-api.jar&#xff0c;查了下包依赖&#xff0c;是xal…...

做手机网站版面做多宽/百度网页版浏览器

首先新建一个文本&#xff0c;重新将后缀名改为.bat 右击编辑 输入start http://geekprank.com/hacker/--kiosk Ctrls保存。 start就是访问这个网址&#xff0c;当然我提供的这个网址还挺有意思的&#xff01; 效果图如下&#xff1a; 结语&#xff1a;今天的代码你学废了吗&a…...

好女人生活常识网站建设/免费自动推广手机软件

1。怎么关闭windows7的自动更新&#xff1f; 答: 控制面板---管理工具---性能和维护---服务---Automatic Updates---设置启动类型“禁用”---确定&#xff0c;这样就可以了。...

wordpress 热门排行/百度seo优化包含哪几项

在spring的配置文件中配置的bean&#xff0c;spring会进行依赖注入和初始化对象。 根据配置不同&#xff0c;spring会选择不同的代理方式。对于JDK动态代理、cglib动态代理&#xff0c;spring会找到目标接口的实现类并初始化一个对象&#xff0c;对于Dubbo的consumer&#xff…...