链表OJ(七)删除有序链表中重复的元素-I -II

news2024/12/25 15:55:55

目录

删除有序链表中重复的元素-I

删除有序链表中重复的元素-II


删除有序链表中重复的元素-I

描述

删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次
例如:
给出的链表为1→1→21→1→2,返回1→21→2.
给出的链表为1→1→2→3→31→1→2→3→3,返回1→2→31→2→3.

【解法一】哈希遍历删除(该方法下面俩道题均适合)

哈希表遍历一遍,对每个元素出现次数统计,然后再遍历第二遍,将结点元素出现次数出现超过俩次的全部删除

【解法二】直接删除

 使用哑结点pre来进行删除,如果pre与cur值相等,就用pre删掉cur,如果不相等俩个一起后移就行

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        // write code here
        auto newhead = new ListNode(-1);
        newhead->next = head;
        auto pre = newhead, cur = head;
        while(cur)
        {
            if(cur->val == pre->val)
            {
                pre->next = cur->next;    // 相等进行删除
                cur = pre->next;
            }
            else {
                pre = pre->next;    // 不相等后移
                cur = cur->next;
            }
        }
        return newhead->next;
    }
};

 删除有序链表中重复的元素-II

描述

给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。
例如:
给出的链表为1→2→3→3→4→4→51→2→3→3→4→4→5, 返回1→2→51→2→5.
给出的链表为1→1→1→2→31→1→1→2→3, 返回2→32→3.

【解法一】直接删除

 利用pre来删除后面有相等元素的结点,每次循环定义一个Next,利用Next与cur进行比较,如果如果Next的值等于cur,那么Next不断后移(注意Next判空存在),直到找到一个nullptr或者与cur不相等的结点为止,利用pre删除中间相等的结点

 直到找到一个nullptr或者与cur不相等的结点为止,利用pre删除中间相等的结点

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        // write code here
        ListNode* newhead = new ListNode(-1);
        newhead->next = head;
        auto pre = newhead, cur = head, Next = head;
        while(cur)
        {
            Next = cur->next;
            if(Next && cur->val == Next->val)
            {
                while(Next && cur->val == Next->val)
                {
                    Next = Next->next;    // Next遍历至最后一个不相等结点或者空节点
                }
                pre->next = Next;    // 利用pre进行删除
                cur = Next;        // 更新cur
            }
            else {
                pre = pre->next;    // 如果俩结点不相等,cur pre一起后移
                cur = cur->next;
            }
        }
        return newhead->next;
    }
};

【解法二】哈希遍历删除

哈希表遍历一遍,对每个元素出现次数统计,然后再遍历第二遍,将结点元素出现次数出现超过俩次的全部删除

 

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

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

相关文章

码农饭碗不保——ChatGPT正在取代Coder

码农饭碗不保——ChatGPT正在取代Coder 最近被OpenAI的ChatGPT刷屏了。我猜你已经读了很多关于ChatGPT的文章,不需要再介绍了。假如碰巧您还不太了解ChatGPT是什么,可以先看一下这篇文章,然后再回来继续。 与ChatGPT对话很有趣,…

【尊享版】如何从零到一掌控习惯?

超友们,早上好~ 今天为你带来的分享是《如何从零到一掌控习惯?》,主要分为八个部分: 一、【为什么要培养习惯?】 二、【养成新习惯为什么很难?】 三、【习惯养成的原理是什么?】 …

D3.js绘图流程

简介 D3.js是由javaScript语言编写绘图库,其原理是:通过调用一系列内置函数,生成SVG,并在网页渲染。 本文以频率分布直方图案例为例,介绍使用D3.js的流程 流程 第一步 引用D3.js库 建立一个html文件,在…

【Flutter】入门Dart语言:初步了解内建类型

文章目录一、概述1.为什么叫内建类型?2.Dart的内建类型有哪些?二、内建类型详解1.num2.int3.double4.String5.bool6.List7.Map8.Function三、总结一、概述 "The greatest glory in living lies not in never falling, but in rising every time we…

分享111个HTML体育竞技模板,总有一款适合您

分享111个HTML体育竞技模板,总有一款适合您 111个HTML体育竞技模板下载链接:https://pan.baidu.com/s/1JmjlNVApPLVWnSEN5VlILQ?pwd5kzl 提取码:5kzl Python采集代码下载链接:采集代码.zip - 蓝奏云 响应式户外攀岩运动宣传…

【亲测有效】错误代码0x904,远程桌面连接异常终端问题

【亲测有效】错误代码0x904,远程桌面连接异常终端问题一、问题情况二、解决办法1.打开防火墙,如图,点击“允许应用或功能通过Windows”2.点击“允许其他应用”3.点击“浏览”4.在如下目录找到“mstsc.exe”添加5.点击“添加”6.勾选“专用”和…

[软件工程导论(第六版)]第5章 总体设计(课后习题详解)

文章目录1. 为每种类型的模块耦合举一个具体例子。2. 为每种类型的模块内聚举一个具体例子。3. 用面向数据流的方法设计下列系统的软件结构。4. 美国某大学共有200名教师,校方与教师工会刚刚签订一项协议。按照协议,所有年工资超过$26000(含$…

电商搜索和推荐场景下的MLOps实践

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2023年1月份热门报告合集ChatGPT的发展历程、原理、技术架构及未来方向《ChatGPT:真格基金分享.pdf》2023年AIGC发展趋势报告:人工智能的下一时代2023年…

图的基本概念和性质

目录一、图的引入1.引言2.不同类型的图3.无序对和无序积4.什么是图二、图的表示1.图的表示2.邻接矩阵3.邻接点与邻接边4.一些简单的特殊图三、图的分类1.按边有无方向分类2.按有无平行边分类3.按有无权值分类4.综合分类方法四、子图和补图1.各类子图2.完全图3.补图4.补图的邻接…

WSL(ubuntu2204)xfce4安装中文环境和fcitx5框架及中文输入法

安装中文语言包 sudo apt install language-pack-zh-hans 配置中文显示 首先运行如下命令配置 locale $ sudo vi /etc/locale.gen 找到 *zh_CN.UTF-8 UTF-8* 并取消注释,然后保存并退出。 locale.gen... # zh_CN.GBK GBK zh_CN.UTF-8 UTF-8 # zh_HK BIG5-HKS…

【C语言刷题】倒置字符串

解题思路与过程📽️解题思路📽️解题过程🔧1.输入🔧2.设计逆序函数🔧3.逆序整个字符串🔧4.逆序每个单词📽️源码📷先来看题👇📽️解题思路 🔴 首先…

【验证码的识别】—— 图形验证码的识别

前言 (结尾有彩蛋欧) 目前,许多网站采取各种各样的措施来反爬虫,其中一个措施便是使用验证码。随着技术的发展,验证码的花样越来越多。验证码最初是几个数字组合的简单的图形验证码,后来加入了英文字母和混…

RK356x U-Boot研究所(命令篇)3.6 fdt命令的用法

平台U-Boot 版本Linux SDK 版本RK356x2017.09v1.2.3文章目录 一、fdt命令的配置二、fdt命令的定义三、fdt命令的用法3.1 fdt list3.2 fdt rm3.3 fdt set一、fdt命令的配置 .config配置文件需要有以下配置: rk3568_defconfig默认已使能。 二、fdt命令的定义 usb命令定义在cm…

169、【动态规划】leetcode ——123. 买卖股票的最佳时机 III:二维数组+一维数组 (C++版本)

题目描述 原题链接:123. 买卖股票的最佳时机 III 解题思路 (1)二维dp数组 动态规划五步曲: (1)dp数组含义: dp[i][0],表示无操作。主要由四个状态来表示四种操作。dp[i][1]&…

博客系统web自动化测试

目录 一、项目简介 二、测试用例 三、测试过程 3.1 环境搭建 3.2 编写代码 3.2.1 博客登陆页面测试 3.2.2 博客列表页面测试 3.2.3 博客详情页面测试 3.2.4 博客编辑页面测试 四、测试评估 一、项目简介 本项目是一个简易的个人博客系统,用户可以在登陆后…

W800开发板|SDK| HLK-W800-KIT-PRO|工具链|本地命令行编译|Windows11|WSL|(5)、海凌科W800开发板命令行编译指南

概况 海凌科W800开发板(HLK-W800-KIT)是海凌科电子面向开发者针对联盛德W800 芯片推出的一款多功能开发板。全功能版本与联盛德W800开发板相比,增加了温湿度传感器、RGB 灯以及音频解码器、功放可以直接在开发版验证功能。联盛德W800的csdk也…

java虚拟机内存分布

java虚拟机内存分布 Java虚拟机在执行java程序的过程中会把它所管理的内存划分为如下若干个不同的数据区域。 1.程序计数器 程序计数器是线程私有的,它占用的空间相对较小,用来记录当前线程字节码执行到哪一步。字节码解释器通过改变这个计数器的值来获…

Portraiture2023最新版人像图像后期处理软件

2023全新发布Portraiture 4是专注于图像后期处理软件研发的 Imagenomic, LLC产品之一,在摄影爱好者中有点影响力。Portraiture可以将繁琐复杂的人像磨皮操作极致简化,不论是普通爱好者或专业后期处理人员,均能一键完成。凭借优秀的AI算法和多…

uniapp 悬浮窗(应用内、无需授权) Ba-FloatWindow2

简介(下载地址) Ba-FloatWindow2 是一款应用内并且无需授权的悬浮窗插件。支持多种拖动;自定义位置、大小;支持动态修改。 支持自动定义起始位置支持自定义悬浮窗大小支持贴边显示支持多种拖动方效果:不可拖动、任意…

python--matplotlib(1)

前言 Matplotlib画图工具的官网地址是 http://matplotlib.org/ Python环境下实现Matlab制图功能的第三方库,需要numpy库的支持,支持用户方便设计出二维、三维数据的图形显示。 正文 1.arange函数 arange函数需要三个参数,分别为起始点、终止…