河南省建设教育协会网站首页/世界500强企业名单

河南省建设教育协会网站首页,世界500强企业名单,营销型企业网站建设流程,网站推荐靠谱的能长久看的1. 题目 描述 给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。 例如: 给出的链表为1→2→3→3→4→4→5, 返回1→2→5. 给出的链表为1→1→1→2→3 返回2→3. 数据范围:链表长度 0≤…

1. 题目

描述

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

数据范围:链表长度 0≤n≤100000 ,链表中的值满足 ∣val∣≤1000

要求:空间复杂度 O(n),时间复杂度 O(n)

进阶:空间复杂度 O(1),时间复杂度 O(n)

示例1

输入:

{1,2,2}

返回值:

{1}

示例2

输入:

{}

返回值:

{}

2. 解题思路

本题要求删除重复的元素即在链表中重复的元素都会被删除,由于重复的元素也有可能是头结点,因此需要定义一个链表的虚拟头结点,虚拟头结点的指针域指向链表的头结点。

假如链表结构如下图所示:

这时可以通过以下步骤完成链表重复元素的删除。

步骤一:定义虚拟头结点、指针变量。

cur :链表节点衔接指针(当前操作的节点);

nxt1:操作的下一个节点;

nxt2 :操作的下下一个节点。

步骤二:循环删除链表的重复节点。

此时,nxt1与nxt2对应的节点值都是1(重复的元素),移动nxt2。

此时,nxt1与nxt2对应的节点值还是1(重复的元素),移动nxt2。

这时,nxt1的节点值是1,nxt2的值是2,需将已经检查出重复的元素1删除。删除重复元素1可以通过更改cur当前节点的指针域,让它指向nxt2,这样就可以将多个1节点删除。

之后再移动nxt1与nxt2,使得nxt1始终指向当前操作节点cur的下一个节点;nxt2始终指向当前操作节点cur的下下一个节点。

ntx1 = cur.next # 下一个节点

ntx2 = cur.next.next # 下下一个节点

此时,nxt1与ntx2对应的节点值都是2(重复的元素),移动nxt2。

这时,nxt1的节点值是2,nxt2的值是3,需将已经检查出重复的元素2删除。删除重复元素2可以通过更改cur当前节点的指针域,让它指向nxt2,这样就可以将多个2节点删除。

之后再移动nxt1与nxt2,这时发现nxt1与nxt2中有一个为Null,循环退出(重复元素删除完成)。

步骤三:返回链表中无重复节点组成的链表头结点。

虚拟头节点的下一个节点就是需要返回的链表头节点,将其返回。

如果文字描述的不太清楚,你可以参考视频的详细讲解。

  • Python版本:数据结构笔试面试算法-Python语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Python语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1370403

  • Java版本:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1366847

  • Golang版本:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1364604

3. 编码实现

核心伪代码如下:

函数 删除重复节点(头节点 head) 返回 链表节点:如果 head 为空:返回 head//1. 定义虚拟头结点、指针变量创建虚拟头节点 tmp_head,值为 -1tmp_head的下一个节点指向 head当前节点 cur 指向 tmp_head//2. 循环删除链表的重复节点当 cur的下一个节点 不为空 且 cur的下一个节点的下一个节点 不为空 时,循环执行:ntx1 = cur的下一个节点ntx2 = cur的下一个节点的下一个节点如果 ntx1的值 == ntx2的值:val = ntx1的值当 ntx2 不为空 且 ntx2的值 == val 时,循环执行:ntx2 = ntx2的下一个节点cur的下一个节点 = ntx2  # 跳过所有重复节点否则:cur = cur的下一个节点  # 移动指针到下一个非重复节点// 3.返回链表中无重复节点组成的链表头结点返回 tmp_head的下一个节点  # 返回处理后的链表头节点

具体完整代码你可以参考下面视频的详细讲解。

  • Python版本:数据结构笔试面试算法-Python语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Python语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1370403

  • Java版本:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1366847

  • Golang版本:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1364604

4.小结

本题要求删除重复的元素即在链表中重复的元素都会被删除,由于重复的元素也有可能是头结点,因此需要定义一个链表的虚拟头结点,虚拟头结点的指针域指向链表的头结点。

这时可以通过以下步骤完成链表重复元素的删除。(1)定义虚拟头结点、指针变量;(2)循环删除链表的重复节点;(3)返回链表中无重复节点组成的链表头结点。


《数据结构与算法》深度精讲课程正式上线啦!七大核心算法模块全解析:

✅ 链表 ✅ 二叉树 ✅二分查找、排序 ✅ 堆、栈、队列 ✅回溯算法 ✅ 哈希算法 ✅ 动态规划

无论你是备战笔试面试、提升代码效率,还是突破技术瓶颈,这套课程都将为你构建扎实的算法思维底座。🔥立即加入学习打卡,与千名开发者共同进阶!

  • Python编码实现:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1509965

  • Java编码实现:数据结构笔试面试算法-Java语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Java语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1510007

  • Golang编码实现:数据结构笔试面试算法-Go语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Go语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1509945

对于链表的相关操作,我们总结了一套【可视化+图解】方法,依据此方法来解决链表相关问题,链表操作变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。

今日佳句:千淘万漉虽辛苦,吹尽狂沙始到金。

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

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

相关文章

树莓派超全系列文档--(7)RaspberryOS播放音频和视频

播放音频和视频 播放音频和视频VLC 媒体播放器vlc GUIvlc CLI使用 cvlc 在没有图形用户界面的情况下播放媒体 在 Raspberry Pi OS Lite 上播放音频和视频指定音频输出设备指定视频输出设备同时指定音频和视频输出设备提高数据流播放性能 文章来源: http://raspberr…

Wireshark学习

Wireshark简介 抓包前 1.打开wireshark得到下面的界面 2.选择菜单栏上捕获-> 选项,勾选WLAN网卡(这里需要根据各自电脑网卡使用情况选择,简单的办法可以看使用的IP对应的网卡)。点击开始。启动抓包。 3.wireshark启动后&am…

[OS_4] 数学视角 | 多状态 | 模型检查器 | 程序验证(math)

程序 状态机 gdb 单步执行 状态迁移 状态里有什么?gdb 可以打印有一些特殊的状态迁移 硬件 状态机 指令执行 状态迁移 从 CPU Reset 开始执行 FirmwareFirmware 加载操作系统 (程序) 操作系统 状态机 (毫无疑问) 程序是一种真正意义上的 “数学严格” 的…

互联网的“神经中枢”域名根服务器是如何演变的?

互联网如同一条隐形的纽带,将全球数十亿人的生活和工作紧密相连。而在这庞大的网络体系中,域名根服务器则是支撑其平稳运行的“神经中枢”。那么域名根服务器是如何演变的呢? 一、域名根服务器互联网的“地址簿” 想象一下,当你…

6.2、认证主要产品与应用

目录 认证主要产品认证产品主要技术指标认证技术应用认证技术应用 - 校园网应用认证技术应用 - 网络路由认证认证技术应用 - 用户登录设备认证技术应用 - 人脸识别门禁与eID 认证主要产品 应用认证产品主要形态有三种,硬件模式、软件模式和软硬相结合。硬件比如说认…

一套SaaS多租户医疗云his源码,基于云计算的医院信息管理系统(云HIS)

基于云计算的医院信息管理系统(云HIS),通过SaaS服务模式提供。这种云HIS系统设计考虑了模板化、配置化、智能化和可扩展性,覆盖了基层医疗机构的核心工作流程,并且能够与监管系统无缝对接,满足未来的扩展需…

基于杜鹃鸟鲶鱼优化(Cuckoo Catfish Optimizer,CCO)算法的多个无人机协同路径规划(可以自定义无人机数量及起始点),MATLAB代码

一、杜鹃鸟鲶鱼优化算法 杜鹃鸟鲶鱼优化(Cuckoo Catfish Optimizer,CCO)算法模拟了杜鹃鸟鲶鱼的搜索、捕食和寄生慈鲷行为。该算法的早期迭代侧重于执行多维包络搜索策略和压缩空间策略,并结合辅助搜索策略来有效限制慈鳔的逃逸空…

FPGA_DDS_IP核

接下来对FPGA的DDS的ip核进行学习。 首先对DDS需要有些了解 DDS信号发生器采用直接数字频率合成(Direct Digital Synthesis,简称DDS)技术,简单来说就是 需要一个系统频率和一个输入的数字数据 ,用这个系统频率计算出…

libpng-1.6.47-windows编译

本文操作按照《c&c开源库编译指南》中内容规范编写,编译环境配置、工具下载、目录规划,及更多其他开源库编译方法请参考该文章。 c&c开源库编译指南:https://blog.csdn.net/binary0006/article/details/144086155 本文章中的源代码已…

linux安装配置Nacos

环境:centos7、mysql8.0、nacos2.5.1 1.下载Nacos安装包 https://github.com/alibaba/nacos/releases?spm5238cd80.72a042d5.0.0.46bacd36C42EfG 我这边选的是最新的稳定版本2.5.1 2. 放到 linux 服务器中解压安装 解压 tar -xvf nacos-server-2.5.1.tar.gz 进入…

元宇宙浪潮下,数字孪生如何“乘风破浪”?

在当今科技飞速发展的时代,元宇宙的概念如同一颗璀璨的新星,吸引了全球的目光。元宇宙被描绘为一个平行于现实世界、又与现实世界相互影响且始终在线的虚拟空间,它整合了多种前沿技术,为人们带来沉浸式的交互体验。而数字孪生&…

[Effective C++]条款24:若所有参数皆需类型转换,请为此采用non-menber函数

. 1、操作符重载&隐式类型转换 C中,操作符重载可以通过成员函数或非成员函数来实现。当操作符重载是成员函数时,左操作数必须是该类的对象。如果左操作数不是该类的对象,而是需要进行隐式转换的类型,编译器将无法找到匹配的成…

C++———— Vector

一、vector的介绍及使用 1.1 vector的介绍 1.2 vector 的使用 1.21 vector的定义 演示: 1.22 vector iterator 的使用 1.beginend 主要作用:获取第一个数据位置的迭代器和最后一个数据的下一个位置的迭代器。 演示: 2.rbeginrend 主要…

STL入门

STL入门 作者:blue 时间:2024.3 文章目录 STL入门0.概述1.pair2.set(集合)3.vector4.string字符串类型5.queue,deque,priority_queue6.list的用法 0.概述 本文讨论部分常用的STL的运用 1.pair pair是将2个数据组合成一组数据…

从声源定位(DOA)算法仿真到工程源码实现-第八节

一、概述 本节我们记录在respeaker core v2 开发板上部署一个完整的声源定位(DOA)系统,演示可以看第一节中的视频。整个模块可以分为三部分,第一部分为控制开发板上的LED灯显示,这样可以实时的测试算法的效果;第二部分为从ALSA上取…

Java后端API限流秘籍:高并发的防护伞与实战指南

目录导航 📜 🛡️ 为什么需要API限流?🧠 主流限流算法大解析👩‍💻 阿里巴巴的限流实践📏 四大黄金定律🤼 限流策略组合拳🏆 限流场景实战💻 技术实现方案🌟 最佳实践分享📈 结语与展望📚 推荐阅读 1. 🛡️ 为什么需要API限流? 在高并发环境中,未…

【计算机网络】计算机网络协议、接口与服务全面解析——结合生活化案例与图文详解

协议、接口与服务 导读一、协议1.1 定义1.2 组成 二、接口三、服务3.1 定义3.2 服务与协议的区别3.3 分类3.3.1 面向连接服务于无连接服务3.3.2 可靠服务和不可靠服务3.3.3 有应答服务和无应答服务 结语 导读 大家好,很高兴又和大家见面啦!!…

vue数字公式篇 Tinymce结合使用(二)

继上一篇的数字公式 , 这次的功能是将公式能插入编辑器以及修改 1、Tinymce 自定义 LateX 按钮,打开公式编辑器窗口 LateX.vue window.tinymce.init({...//基础配置这里我就不写了setup(ed) {//自定义 LateX 按钮ed.ui.registry.addButton(LateX, {text:…

数据结构初阶-二叉树链式

目录 1.概念与结构 2.二叉数链式的实现 2.1遍历规则 2.2申请内存空间 2.3手动构建一棵二叉树 2.4二叉树结点的个数 2.5二叉树叶子结点的个数 2.6二叉树第K层结点个数 2.7二叉树的高度 2.8二叉树中查找值为x的结点 2.9二叉树的销毁 3.层序遍历 3.1概念 3.2层序遍历…

鸿蒙HarmonyOS NEXT之无感监听

鸿蒙中存在一些无感监听,这些监听经过系统API封装使用很简单,但是对实际业务开发中有很重要,例如埋点业务、数据统计、行为上报、切面拦截等。 Navigation的页面切换 在鸿蒙中Navigation被用来作为路由栈进行页面跳转,如果你想知…