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

leetcode删除排序链表中的重复元素-小白初学简单解说

题目:

给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。

 

提示:

  • 链表中节点数目在范围 [0, 300] 内
  • -100 <= Node.val <= 100
  • 题目数据保证链表已经按升序 排列

解法:

先理清思路:

  1. 已经知道这个链表的升序排序了,所以我们可以一个个检查下去,有一样的就舍弃掉。
  2. 我们用一个指针 current 来遍历链表。
  3. 如果当前 current 与 current.next 对应的元素相同,我们就将current.next 指针指向 current.next.next
  4. 否则,说明链表中 current 对应的元素是没有重复的,因此可以将 current 指针移动到下一个节点。
  5. 遍历结束后,返回链表的头节点即可。

代码实现:

class Solution {public ListNode deleteDuplicates(ListNode head) {// 用current遍历,保留headListNode current = head;while(current != null && current.next != null){if(current.val == current.next.val){current.next = current.next.next;  // 跳过重复的节点}else{current = current.next;    // 移动到下一个节点}}return head;  // head 始终指向链表的头部,返回原始头节点}
}

细节注意:

遍历链表时为什么需要新定义一个current?不能直接使用head?-----因为直接使用head去遍历会导致直接修改head,后面的head指针也会不断后移,最终返回的不是原始链表的头节点了,而是链表最后一个节点(或null)。

正确做法:应该用一个 current 指针遍历链表,而保持 head 不变,始终指向链表的头部,最后返回 head

时间复杂度:O(n)(只需遍历一次链表)。

空间复杂度:O(1)(只用了额外指针 current)。

http://www.xdnf.cn/news/11944.html

相关文章:

  • JavaScript 深入探索:高级应用与前沿技术
  • 佰力博科技与您探讨半导体电阻测试的基本原理
  • 数据分析之OLTP vs OLAP
  • 乘用车自动驾驶和非乘用车(矿车,卡车)自动驾驶区别
  • 机器学习基础(三) 逻辑回归
  • vue3+elementplus表格表头加图标及文字提示
  • SpringBoot-15-多表查询之多对多查询可选中间表
  • 经典ReLU回归!重大缺陷「死亡ReLU问题」已被解决
  • SAP学习笔记 - 开发22 - 前端Fiori开发 数据绑定(Jason),Data Types(数据类型)
  • Doris查询Hive数据:实现高效跨数据源分析的实践指南
  • 机器翻译模型笔记
  • go语言的锁
  • React与原生事件:核心差异与性能对比解析
  • Java时间API终极指南
  • C++11 中 auto 和 decltype 的深入解析
  • DeepSeek本地部署及WebUI可视化教程
  • 豆瓣图书评论数据分析与可视化
  • CentOS在vmware局域网内搭建DHCP服务器【踩坑记录】
  • 2025年- H66-Lc174--215.数组中的第k个最大元素(小根堆,堆顶元素是当前堆元素里面最小的)--Java版
  • 【计算机网络】HTTPS
  • OD 算法题 B卷【排队游戏】
  • Odoo 审批模块深度解析
  • 学习logging模块
  • nt!CcInitializeCacheMap函数分析初始化Vacbs结构
  • nmcli connection常用命令及设置wifi为AP模式
  • 【Redis实战:缓存与消息队列的应用】
  • Ethernet IP转Modbus网关在热泵机组中的协议转换技术实现
  • [C++入门]简化的艺术---对模版的初步探索
  • 敏捷项目管理:重塑价值交付的动态协作范式
  • 什么是内网映射?如何将内网ip映射到外网访问?