当前位置: 首页 > news >正文

可视化图解算法:删除有序(排序)链表中重复的元素

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版本:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1366846

  • Golang版本:哔哩哔哩_bilibilihttps://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版本:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1366846

  • Golang版本:哔哩哔哩_bilibilihttps://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编码实现:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1510007

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

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

今日佳句:春风得意马蹄疾,一日看尽长安花。

相关文章:

  • 基于AOP注解+Redisson实现Cache-Aside缓存模式实战
  • 春日焕新居:约克VRF中央空调,科技赋能,带你开启健康呼吸新时代
  • 力扣题目分享:只出现1次的数字I II III(位运算版)
  • 宝塔docker flarum默认登录账号密码,crazymax/flarum镜像默认登录账号密码
  • 蓝桥杯算法题分享(二)
  • 从 Copilot 到垂直工具:AI 编程的 “专精特新“ 进化论
  • 用python写网络爬虫
  • 如何用Spring AI构建MCP Client-Server架构
  • 动手实践:单机安装高性能列式存储数据库ClickHouse
  • 根据模板将 Excel 明细数据生成 PDF 文档 | PDF实现邮件合并功能
  • 大数据学习(85)-Flume详解
  • mysql学习-索引规则
  • 蓝桥杯 回文字符串
  • 09_JavaScript数据操作方法_数组2
  • 基于Zookeeper的微服务配置管理与灰度发布实战指南
  • WEB API 设计规范
  • Leetcode——1047. 删除字符串中的所有相邻重复项
  • 阶跃星辰开源300亿参数视频模型Step-Video-TI2V:运动可控+102帧长视频生成
  • Hyperlane 似乎是一个轻量级、高性能的 Rust HTTP 服务器库
  • Redis原理:Monitor 实现
  • 给个人信息穿上“防弹衣”,国家网络身份认证申领攻略来了
  • 媒体刊文:“假官号”层出不穷,平台要当好把关人
  • 哪都“差一点”的《歌手2025》,还能爆吗?
  • 连续两个交易日涨停,华夏幸福:生产经营活动正常,不存在影响股价波动的重大事宜
  • 江苏省人民检察院副检察长丁海涛调任省委政法委副书记
  • 学人、学术、学科、学脉:新时代沾溉下的中国西方史学史