1. 题目
描述
删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次 例如: 给出的链表为1→1→2,返回1→2. 给出的链表为1→1→2→3→3返回1→2→3.
数据范围:链表长度满足 0≤n≤1000 ,链表中任意节点的值满足 ∣val∣≤100
进阶:空间复杂度 O(1),时间复杂度 O(n)
示例1
输入:
{1,1,2}
返回值:
{1,2}
示例2
输入:
{}
返回值:
{}
2. 解题思路
本题是:删除有序链表中重复的元素,即重复的元素需要保留一个,同时限定了链表是有序的(这样只需要比较相邻的元素值)。
这时可以通过一个操作指针变量cur就可以完成题目的要求。
假如有序链表如下图所示:
步骤一:定义操作节点指针变量。
步骤二:循环删除链表重复节点。
-
当前节点与下个节点值相同,删除下一个节点
cur对应的节点值1与它的下一个节点值1相同,则删除下一个节点(更改cur的指针域: cur.next = cur.next.next)。之后再将cur移动到下一个节点(2节点)便于后序的操作。
-
节点值不相同,移动指针变量cur
cur指向节点2与下一个节点值3不相同,则将cur移动到一个节点(3节点)。
如果cur对应的下一个节点为Null,就没有必要再比较了(已经是空节点了),循环退出。
步骤三: 返回头结点。
处理之后的链表头结点与原链表头结点相同,直接返回原链表头节点即可。
如果文字描述的不太清楚,你可以参考视频的详细讲解。
-
Python版本:数据结构笔试面试算法-Python语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Python语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕
https://www.bilibili.com/cheese/play/ep1370402
-
Java版本:哔哩哔哩_bilibili
https://www.bilibili.com/cheese/play/ep1366846
-
Golang版本:哔哩哔哩_bilibili
https://www.bilibili.com/cheese/play/ep1364603
3. 编码实现
核心伪代码如下:
函数 deleteDuplicates(头节点 head):如果 head 为空:返回 head// 1. 定义操作节点指针变量当前节点 cur ← head// 2. 循环删除链表重复节点当 cur的下一个节点 不为空 时://2.1 当前节点与下个节点值相同,删除下一个节点如果 cur的值 等于 cur.next的值:cur的下一个节点 ← cur.next的下一个节点//2.2 节点值不相同,才移动指针变量否则:cur ← cur.next// 3. 返回头结点返回 head
具体完整代码你可以参考下面视频的详细讲解。
-
Python版本:数据结构笔试面试算法-Python语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Python语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕
https://www.bilibili.com/cheese/play/ep1370402
-
Java版本:哔哩哔哩_bilibili
https://www.bilibili.com/cheese/play/ep1366846
-
Golang版本:哔哩哔哩_bilibili
https://www.bilibili.com/cheese/play/ep1364603
4.小结
删除有序链表中重复的元素(重复的元素需要保留一个),可以通过以下步骤完成:(1)定义操作节点指针变量;(2)循环删除链表重复节点;(3)返回头结点。
《数据结构与算法》深度精讲课程正式上线啦!七大核心算法模块全解析:
✅ 链表 ✅ 二叉树 ✅二分查找、排序 ✅ 堆、栈、队列 ✅回溯算法 ✅ 哈希算法 ✅ 动态规划
无论你是备战笔试面试、提升代码效率,还是突破技术瓶颈,这套课程都将为你构建扎实的算法思维底座。🔥立即加入学习打卡,与千名开发者共同进阶!
-
Python编码实现:数据结构笔试面试算法-Python语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Python语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕
https://www.bilibili.com/cheese/play/ep1509965
-
Java编码实现:哔哩哔哩_bilibili
https://www.bilibili.com/cheese/play/ep1510007
-
Golang编码实现:哔哩哔哩_bilibili
https://www.bilibili.com/cheese/play/ep1509945
对于链表的相关操作,我们总结了一套【可视化+图解】方法,依据此方法来解决链表相关问题,链表操作变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。
今日佳句:春风得意马蹄疾,一日看尽长安花。