力扣82题删除排序链表中的重复元素

2024-05-15 21:20

本文主要是介绍力扣82题删除排序链表中的重复元素,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

82题删除排序链表中的重复元素

题目描述

给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。
在这里插入图片描述

题目分析

  • 这个题需要返回已排序链表,我们需要考虑一种情况就是头结点为重复元素,那么我们把头结点删除之后没有办法再找到之后的节点了,这个时候我们需要设置一个虚头节点,来保证即使头结点删除了我们也能找到之后的节点
  • 我们需要新建一个指针cur指向虚头节点
  • 明确删除节点的操作就是将他的前驱节点与后继节点相连接,所以我们需要保证cur->next 与cur->next->next不为空,这个顺序不能乱
  • 当找到cur->next->val=cur->next->next->val的时候,我们需要将这个值记录一下,用p记录一下这个值,这个值在后续可能还会出现的,如果cur->next->val!=cur->next->next->val的话,cur往后走一步
  • 再次遍历后续链表将cur->next不为空且cur->next->val的值等于我们标记的值证明我们找到了重复的值,cur->next=cur->next->next 进行删除操作
  • 我们这样就完成了这个过程,返回h->next即可。
    -在这里插入图片描述
    创建虚头节点
    在这里插入图片描述
    这时cur->next->val=cur->next->next->val
    这时cur->next->val=cur->next->next->val
    将3标记为x,进行删除操作
    将3标记为x,进行删除操作
    这时cur的位置并没有发生改变,cur->next->val=cur->next->next->val=4
    这时cur的位置并没有发生改变,cur->next->val=cur->next->next->val=4
    cur->next指向5的时候,cur->next->next为空,跳出循环,完成整个删除过程
    [cur->next指向5的时候,cur->next->next为空,跳出循环,完成整个删除过程

代码

class Solution {
public:ListNode* deleteDuplicates(ListNode* head) {if(!head)return head;ListNode*h=new ListNode();h->next=head;ListNode*cur=h;while(cur->next&&cur->next->next){if(cur->next->val==cur->next->next->val){int p=cur->next->val;while(cur->next&&cur->next->val==p){cur->next=cur->next->next;}}else{cur=cur->next;}}return h->next;}
};

这篇关于力扣82题删除排序链表中的重复元素的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/992954

相关文章

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

mybatisplus的逻辑删除过程

《mybatisplus的逻辑删除过程》:本文主要介绍mybatisplus的逻辑删除过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录myBATisplus的逻辑删除1、在配置文件中添加逻辑删除的字段2、在实体类上加上@TableLogic3、业务层正常删除即

C++归并排序代码实现示例代码

《C++归并排序代码实现示例代码》归并排序将待排序数组分成两个子数组,分别对这两个子数组进行排序,然后将排序好的子数组合并,得到排序后的数组,:本文主要介绍C++归并排序代码实现的相关资料,需要的... 目录1 算法核心思想2 代码实现3 算法时间复杂度1 算法核心思想归并排序是一种高效的排序方式,需要用

MybatisPlus中removeById删除数据库未变解决方案

《MybatisPlus中removeById删除数据库未变解决方案》MyBatisPlus中,removeById需实体类标注@TableId注解以识别数据库主键,若字段名不一致,应通过value属... 目录MyBATisPlus中removeBypythonId删除数据库未变removeById(Se

把Python列表中的元素移动到开头的三种方法

《把Python列表中的元素移动到开头的三种方法》在Python编程中,我们经常需要对列表(list)进行操作,有时,我们希望将列表中的某个元素移动到最前面,使其成为第一项,本文给大家介绍了把Pyth... 目录一、查找删除插入法1. 找到元素的索引2. 移除元素3. 插入到列表开头二、使用列表切片(Lis

MySQL逻辑删除与唯一索引冲突解决方案

《MySQL逻辑删除与唯一索引冲突解决方案》本文探讨MySQL逻辑删除与唯一索引冲突问题,提出四种解决方案:复合索引+时间戳、修改唯一字段、历史表、业务层校验,推荐方案1和方案3,适用于不同场景,感兴... 目录问题背景问题复现解决方案解决方案1.复合唯一索引 + 时间戳删除字段解决方案2:删除后修改唯一字

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例