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

news2024/9/30 7:22:59

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

题目描述

原始题目参考:删除有序链表的重复元素
给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。

示例 1:
在这里插入图片描述

输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]

示例 2:
在这里插入图片描述

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

解题思路

递归

以示例1为例,链表序列为[1,2,3,3,4,4,5],求该链表的无重复链表可以简化为求[2,3,3,4,4,5][1]的拼接,再到求[1,2][3,3,4,4,5]的拼接,可以看到[3,3,4,4,5]链表开头有重复,所以去重复数字3的结果链表为[4,4,5],再求其结果为[5],最终的结果为[1,2,5]

参考代码

ListNode* deleteDuplicates(ListNode* head) {
	if(head==nullptr||head->next==nullptr){
	    return head;
	}
	ListNode* last=head->next;
	if(head->val==last->val){
	    while(last!=nullptr && head->val==last->val){
	        last=last->next;
	    }
	    head=deleteDuplicates(last);
	}
	else{
	    head->next=deleteDuplicates(last);
	}
	return head;
}

指针遍历

需要初始一个临时结点指向head结点,然后再遍历中去除重复的元素,让指针指向未重复过的元素。

还是以示例1为例:
[1,2,3,3,4,4,5],添加头节点变为:[0,1,2,3,3,4,4,5];cur为头节点0,判断12是否一样,cur指向1;cur为头节点1,判断23是否一样,cur指向2;cur为头节点2,判断33是否一样,x为3,进行内层while循环,cur->next从第一个3指向第二个3;判断x4是否一样,x为3,跳出内层while循环,cur->next指向第一个4;判断44是否一样,x为4,进行内层while循环,cur->next从第一个4指向第二个4;判断x4是否一样,x为4,跳出内层while循环,cur->next指向5;cur指向5,结束程序。

参考代码

ListNode* deleteDuplicates(ListNode* head) {
    if(head==nullptr||head->next==nullptr){
        return head;
    }
    ListNode* temp=new ListNode(0,head);
    ListNode* cur=temp;

    while(cur->next&&cur->next->next){
        if(cur->next->val==cur->next->next->val){
            int x=cur->next->val;
            while(cur->next!=nullptr && x==cur->next->val){
                cur->next=cur->next->next;
            }
        }
        else{
            cur=cur->next;
        }
    }
    return temp->next;
}

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

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

相关文章

java spring IOC Bean管理操作(xml P名称空间注入)

首先 我们来写一个基本的 通过xml的set属性注入 首先创建一个项目 然后引入 spring 最基本的几个依赖包 src下 下有一个 gettingStarted 包 下面有一个 user类 代码如下 package gettingStarted;public class user {public String name;public int age;public void setName(S…

leetcode 1817. 查找用户活跃分钟数【python3,哈希表的实现思路详解】

题目 给你用户在 LeetCode 的操作日志,和一个整数k。日志用一个二维整数数组logs表示,其中每个logs[i] [IDi, timei]表示ID为IDi的用户在timei分钟时执行了某个操作。 多个用户可以同时执行操作,单个用户可以在同一分钟内执行多个操作。指定…

Deno不只是个Javascript运行时

Deno 是一个安全的 JavaScript 和 TypeScript 运行时,作者是 Ryan Dahl(也是 Node.js 的原作者)。Deno 的诞生之初是为了解决 2009 年首次设计 Node.js 时的一些疏忽。我认为这种改造动机很有道理,因为我相信每个程序员都希望有机…

cmake跨平台构建工具

TOP目录 前言 CMake是一个跨平台的安装编译工具,可以用简单的语句来描述所有平台的安装(编译过程)。CMake可以说已经成为大部分C开源项目标配 因此,作为一名C C发开人员,看到cmake不应该一脸茫然… 作为初学者,通俗的认为cmake…

C语言入门(七)——结构体

复合类型与结构体 数据抽象 数据类型标志 嵌套结构体 复合类型与结构体 在编程语言中,最基本的,不可再分的数据类型称为基本类型,例如整型,浮点型;根据语法规则由基本类型组合而成的类型称为复合类型,例如字符串是…

系统性能优化、性能指标、性能测试

系统性能是互联网应用最核心的非功能性架构目标,系统因为高并发访问引起的首要问题就是性能问题:高并发访问的情况下,系统因为资源不足,处理每个请求的时间就会变慢,看起来就是性能变差。 因此,性能优化是…

1596_AURIX_TC275_LMU简介

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这个章节其实没有多少页文档,而大部分的文档其实是寄存器的字段描述。因此,这次一次性把这个文档的内容大概看完。 LMU提供了32K的本地通用RAM。ED存储的访问也是通…

Mybatis 框架开发的准备

从百度中“mybatis download”可以下载最新的 Mybatis 开发包。进入选择语言的界面,进入中文版本的开发文档。下载相关的 jar 包或 maven 开发的坐标。下载的 zip 文件如下(我们的资料文件夹):我们所使用的 Mybatis 版本是 3.2.7 …

我在CSDN的2022:突破零粉丝,4个月涨粉4000+,2023年目标5万+

文章目录前言我为什么又回来写博客?初写文章碰壁1024活动第一次上热榜关于上热榜博客之星2023年目标最后前言 今年最自豪的事,我用业余时间,在CSDN上坚持创作了4个月,产出了20多篇博客,其中7篇文章上了全站热榜&#…

Python基础必经之路——函数

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 目录前言定义函数向函数传递信息实参和形参传递实参返回值将函数存储在模块中导入整个模块尾语 💝定义函数 下面是一个打印问候语的简单函数 def greet_user():print("hello") greet_user()本例示例…

excel函数技巧:如何快速汇总销售合计项

一年的销售数据整理完了,除了要看到每个人的销售合计之外,老板今年还要看到图中这两项合计:销量最高的三个月合计是指汇总每人一年中,销量最高的三个月的数据。超过平均值的销售合计是指汇总超过总平均值的月份销量。两项合计需要…

【进阶】Spring Boot日志文件

努力经营当下,直至未来明朗! 文章目录一、日志有什么用二、日志怎么用三、 自定义日志打印四、 日志级别五、日志持久化六、更简单的日志输出——lombok小结普通小孩也要热爱生活! 一、日志有什么用 日志是解决问题最直观、最有效的方法。⽇…

ROS2机器人编程简述humble-第二章-Launchers .3.3

ROS2机器人编程简述humble-第二章-Publishing and Subscribing .3.2ros2 run一次只能开启一个node,如果一次开启一组相关node,需要使用ros2 launch。支持Python, XML, 和 YAML。推荐Python。zhangrelayLAPTOP-5REQ7K1L:~$ ros2 run -h usage: ros2 run […

Mysql之约束

简介 not null前面也说过,这些约束是针对列的数据的,对应整个列的数据都起约束作用 基本但是创建表在字段后使用的语句 1.primary key-主键 主键特征1.对应列不能有重复的数据2.不能为NULL 唯一且非空 -- 主键 -- id,name,email CREATE TABLE t17(id…

AX7A200教程(1): DDR3仿真平台搭建(一)

本章节主要调用官方的MIG控制器,并使用官方的MIG控制器进行仿真,开发环境vivado2020.1鉴于很多童鞋无法仿真自己新建的DDR工程,即使使用modelsim仿真也仿真失败,本例程着重于在vivado中,对自己新建的带DDR3的工程进行仿…

力扣45.跳跃游戏Ⅱ(贪心思路详解)

文章目录力扣45.跳跃游戏Ⅱ题目描述算法思路代码实现力扣45.跳跃游戏Ⅱ 题目描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意…

114、【树与二叉树】leetcode ——77. 组合:回溯法+剪枝优化(C++版本)

题目描述 原题链接:77. 组合 解题思路 组合问题是回溯法里的经典问题,分别采用两个全局变量path记录当前组合情况,res作为结果集。每次因为结果集需要去重,因此还需要再设置一个局部变量startIndex作为每次遍历的起始值&#xf…

Linux kernel Memory Pin机制的实现以及测试

提起Memory Pin机制,就不得不提到swap的概念,这两个概念息息相关,为了避免在CPU忙碌的时候,也就是在缺页异常发生的时候,临时搜索可供换出的内存页面并加以换出,Linux内核定期地检查系统的空闲页面数量是否…

九大数据分析方法-单指标分析方法与多指标分析方法

文章目录1 单指标分析方法1.1 周期性分析法1.2 结构分析法1.3 分层分析法2 多指标分析方法2.1 矩阵分析法2.2 指标拆解法本文来源,为接地气的陈老师的知识星球,以及付同学的观看笔记。1 单指标分析方法 顾名思义,用单个数据指标进行数据分析…

RocketMQ 简介

一、简介 官方简介: l RocketMQ是一款分布式、队列模型的消息中间件,具有以下特点: l 能够保证严格的消息顺序 l 提供丰富的消息拉取模式 l 高效的订阅者水平扩展能力 l 实时的消息订阅机制 l 亿级消息堆积能力 二、网络架构 三、特性 1. na…