链表相关操作:移除重复节点、删除中间节点

题目1:移除重复节点

编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。

 输入:[1, 2, 3, 3, 2, 1]
 输出:[1, 2, 3]

解题思路:

 1.创建一个set表,将第一次出现的节点值保存起来

 2.定义pre指针保存前驱,定义cur指针遍历链表

 2.遍历链表,如果当前节点是第一次出现,那么就放入set表中,pre的后继指向当前节点,pre和cur都往后走

    如果当前节点不是第一次出现,那么pre不动,cur往后走

源代码如下:


class Solution {
public:ListNode* removeDuplicateNodes(ListNode* head) {if(head==NULL) return head;unordered_set<int> visited(head->val);//定义一个set容器,保存第一次出现的节点值ListNode* pre=head;ListNode* cur=head->next;while(cur){if(set.count(cur->val)==0)//判断是否存在该节点{set.insert(cur->val);//插入元素pre->next=cur;pre=pre->next;}cur=cur->next;}//遍历完后,cur此时应该指向nullptrpre->next=cur;//pre指针指向cur,结束链表return head;}
};

题目2:删除中间节点

若链表中的某个节点,既不是链表头节点,也不是链表尾节点,则称其为该链表的「中间节点」。

假定已知链表的某一个中间节点,请实现一种算法,将该节点从链表中删除。

例如,传入节点 c(位于单向链表 a->b->c->d->e->f 中),将其删除后,剩余链表为 a->b->d->e->f

输入:节点 5 (位于单向链表 4->5->1->9 中)
输出:不返回任何数据,从链表中删除传入的节点 5,使链表变为 4->1->9

解题思路:

难点在于只知道中间节点的后继,但不知道它的前驱节点 ,无法直接通过前驱指向后继实现本题。

所以我们可以将中间节点的后继节点值赋给中间节点,那么此时链表变为了4->1->1->9 然后将中间节点的后继节点删除即可。

源代码如下:

lass Solution {
public:void deleteNode(ListNode* node) {node->val=node->next->val;//把中间节点的后继节点的值赋给中间节点node->next=node->next->next;//再将中间节点的后继节点删除即可}
};
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/26279.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【暑期每日一练】 Epilogue

目录 选择题&#xff08;1&#xff09;解析&#xff1a; &#xff08;2&#xff09;解析&#xff1a; &#xff08;3&#xff09;解析&#xff1a; &#xff08;4&#xff09;解析&#xff1a; &#xff08;5&#xff09;解析&#xff1a; 编程题题一描述输入描述&#xff1a;输…

ad+硬件每日学习十个知识点(23)23.8.3(LDO 设计实例)(涉及到自控没听懂,学完自控再回来看)

文章目录 1.输入电容的选取&#xff08;两个&#xff0c;一个大电容&#xff0c;一个小电容&#xff09;2.输出电容的选取&#xff08;两个&#xff0c;一个大电容&#xff0c;一个小电容&#xff09;3.有些LDO需要输出的最小负载电流&#xff0c;所以需要接一个下拉电阻。4. 1…

CSharp中构造函数、析构函数和IDisposable使用细节探究

1. 先来一个简单的Demo 1.1. 定义一个类 public class ParentClass {public ParentClass(){Console.WriteLine("ParentClass构造函数");}public void DoSomeThing(){Console.WriteLine("ParentClass做点什么DoSomeThing()");}~ParentClass(){Console.Wri…

电影售票后台管理系统快速搭建(优惠券制作+java开源)

为了快速搭建电影售票后台管理系统并实现优惠券制作功能&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. 确定系统的需求和功能&#xff0c;包括用户管理、影院管理、电影管理、订单管理以及优惠券制作等模块。 2. 选择一款适合的Java开源框架来搭建系统&#xff0c;…

【Megatron-DeepSpeed】张量并行工具代码mpu详解(三):张量并行层的实现及测试

相关博客 【Megatron-DeepSpeed】张量并行工具代码mpu详解(三)&#xff1a;张量并行层的实现及测试 【Megatron-DeepSpeed】张量并行工具代码mpu详解(一)&#xff1a;并行环境初始化 【Megatron-DeepSpeed】张量并行工具代码mpu详解(二)&#xff1a;Collective通信操作的封装ma…

SOME/IP学习笔记1

SOA概念 在SOA中,每个服务就好像我们每一个人在社会中扮演的角色,在对别人提供着服务的同时,同时也享受着别人提供出来的服务,人与人之间,既是彼此独立的,又是需要互相通讯的。服务提供者将功能具象为一组接口,这样使用者就能知道如何调用服务,完成某件事情,得到某个…

Windows下调试UEFI程序:Visual Studio调试

以edk2\MdeModulePkg\Application\HelloWorld这个项目作为调试目标。 1. 使用VS2017建立Makefile工程 VS2017, 新建 project&#xff0c;取名X64dbg_vs。 Visual C > Other > Makefile Project, 注意项目路径为HelloWord程序路径。 随便填写config中的字符串&#xff…

【并发编程】ShenyuAdmin里面数据同步用到的无锁环形队列LMAX Disruptor并发框架

并发&#xff0c;数据同步往往是业务开发中比较重要的部分。 shenyu网关数据同步设计方案图 shenyu官网给出的同步设计方案图如下&#xff1a; 基于事件异步并发框架com.lmax.disruptor 下载下示例代码&#xff0c;跑起来发现&#xff0c;在shenyuAdmin模块里面用到了com.lma…

【2.2】Java微服务:nacos的使用

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f49e;当前专栏&#xff1a; 深度学习 ✨特色专栏&#xff1a; 知识分享 &…

Leetcode.2034 股票价格波动

题目链接 Leetcode.2034 股票价格波动 rating : 1832 题目描述 给你一支股票价格的数据流。数据流中每一条记录包含一个 时间戳 和该时间点股票对应的 价格 。 不巧的是&#xff0c;由于股票市场内在的波动性&#xff0c;股票价格记录可能不是按时间顺序到来的。某些情况下&a…

HTR-01 桌式4英寸快速退火炉

HTR-01 桌式4英寸快速退火炉 HTR-01A快速退火炉系列采用红外辐射加热技术&#xff0c;可实现4寸晶圆片吋样品快速升温和降温&#xff0c;同时搭配超高精度温度控制系统&#xff0c;可达到极佳的温场均匀性&#xff0c;对材料的快速热处理(RTP)、快速退火(RTA)、快速热氮化(RTN)…

观测数据建模

观测数据 观测数据 / 样本空间覆盖均匀 psm 观测数据建模 因果模型得到什么样的值 base 0/1 gmv uplift delat 模型可以得到 confounder 的表征&#xff0c;而 NN 可以支持更个性化的结构。在这里给出两种思路&#xff1a; 思路1: 使用树模型生成的 confounder embedd…

大规模数据处理的技术的五个时代和四代引擎

石器时代 随着互联网的蓬勃发展&#xff0c;数据量在呈指数型增长。早在2003年之前&#xff0c;各大厂商都已经严重面临大规模数据的处理难题&#xff0c;比如Google就已经面对大于600亿的搜索量。如何从海量的原始数据中挖掘出有效的信息&#xff0c;如何保证数据挖掘程序的容…

react组件编写最佳实践

react组件编写最佳实践 作为 React.js 开发的新手&#xff0c;理解基本原则并坚持实用性对于更好地快速开发至关重要。无论我们是在处理简单的任务&#xff08;例如构建初学者待办事项应用程序&#xff09;还是更复杂的项目&#xff08;例如建立电子商务平台&#xff09;&…

【Java】-【tomcat部署项目】

Tomcat 的目录结构 bin&#xff1a;Tomcat 的启动、关闭脚本。 conf&#xff1a;Tomcat 配置文件。 lib&#xff1a;Tomcat 需要的类库&#xff08;jar 包&#xff09;。 logs&#xff1a;日志目录。 temp&#xff1a;Tomcat 运行时产生的临时文件。 webapps&#xff1a;存放 …

相机取图后将数据转换成对应的图像处理库图像文件

相机取图后将数据转换成对应的图像处理库图像文件 前言提要一、大华相机1.to HImage 总结 前言 不同相机取完图像后的图像数据包里包含的数据并不一定是相同的&#xff0c;而且相机取图后的图像数据第三方的视觉库&#xff08;Halcon&#xff0c;visionpro等&#xff09;也并不…

React diff 根据相对位置的 diff 算法

文章目录 diff 算法没有 key 时的diff通过 key 的 diff查找需要移动的节点移动节点添加新元素移除不存在的元素缺点 diff 算法 没有 key 时的diff 根据新旧列表的长度进行 diff 公共长度相同的部分直接patch新列表长度>旧列表长度则添加&#xff0c;否则删除 function pa…

Vue3_02 创建Vue3.0工程

1.使用 vue-cli 创建 ## 查看 vue/cli 版本&#xff0c;确保 vue/cli 版本在4.5.0以上 vue -V 或 vue --version## 安装或升级你的 vue/cli npm install -g vue/cli## 创建 vue create vue_test## 启动 cd vue-test npm run serve 2.使用 vite 创建 什么是vite?——新一代…

31.SpringMVC

SpringMVC MVC MVC是一种软件架构的思想&#xff0c;将软件按照模型、视图、控制器来划分 M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为实体类Bean&#xff1a;专门存储业务数据的…

RxJava 倒计时,轮询器

笔记 倒计时 /*** 短信倒计时** param s*/private Subscription subscription30;public void startCountdownFinishRx30(int s) {clearFinishSubscription30();subscription30 Observable.interval(0, 1, TimeUnit.SECONDS).take(s 1).map(new Func1<Long, Long>() {O…