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

LeetCode CodeTop 82.删除排序链表中的重复元素Ⅱ

1.思路:两个指针分别指向cur.next和cur.next.next,如果发现重复就一次性删除所有值为val的节点;否则cur正常前进一位

2.复杂度分析:

(1)时间复杂度:O(n),其中n为链表的长度。

(2)空间复杂度:O(1),仅用到若干额外变量。

附代码:

class Solution { public ListNode deleteDuplicates(ListNode head) { ListNode sentinel = new ListNode(); sentinel.next = head; ListNode cur = sentinel; while(cur.next != null && cur.next.next != null){ int val = cur.next.val; // 后两个节点值相同,都为val if(val == cur.next.next.val){ // 从第一个值等于val的节点开始,将值等于val的节点全部删除 while(cur.next != null && cur.next.val == val){ cur.next = cur.next.next; } }else{ cur = cur.next; } } return sentinel.next; } }

ACM模式:

import java.util.Scanner; // 将 ListNode 定义为独立的类 class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { this.val = val; this.next = null; } } public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 读取链表长度 int n = scanner.nextInt(); // 读取链表元素 int[] nums = new int[n]; for (int i = 0; i < n; i++) { nums[i] = scanner.nextInt(); } // 创建链表 ListNode head = null; if (n > 0) { head = new ListNode(nums[0]); ListNode current = head; for (int i = 1; i < n; i++) { current.next = new ListNode(nums[i]); current = current.next; } } // 调用删除重复元素方法 Solution solution = new Solution(); ListNode result = solution.deleteDuplicates(head); // 输出删除重复后的链表 if (result == null) { System.out.println(""); } else { ListNode current = result; while (current != null) { System.out.print(current.val); if (current.next != null) { System.out.print(" "); } current = current.next; } System.out.println(); } scanner.close(); } } // 删除重复元素方法放在 Solution 类中 class Solution { public ListNode deleteDuplicates(ListNode head) { ListNode sentinel = new ListNode(); sentinel.next = head; ListNode cur = sentinel; while (cur.next != null && cur.next.next != null) { int val = cur.next.val; // 后两个节点值相同,都为val if (val == cur.next.next.val) { // 从第一个值等于val的节点开始,将值等于val的节点全部删除 while (cur.next != null && cur.next.val == val) { cur.next = cur.next.next; } } else { cur = cur.next; } } return sentinel.next; } }
http://www.zskr.cn/news/1505747.html

相关文章:

  • 全面解析行为验证码技术:从滑动拼图到文字点选的实战解决方案
  • 别再手动重复造轮子了!用C#/Python为PowerMill打造你的专属自动化工具库
  • STM32F103VC实测可用的CH19264E液晶屏8080并口驱动工程包
  • 如何快速部署GB28181视频监控平台:3步完成容器化配置
  • 用PyTorch复现论文:自动驾驶模型真的怕‘贴纸’攻击吗?实测5种对抗样本生成方法
  • Windows下Python直连SAP RFC所需的nwrfc750官方SDK完整包(含DLL、头文件、示例与文档)
  • 手把手教你搭建工业级Multi-Agent RAG系统,附完整代码与部署教程
  • 神经符号AI破局关键:一阶逻辑如何让AI既聪明又“讲理”?
  • CUDA从入门到精通(十四):Thrust库实战之并行算法重构
  • 南宁二手腕表回收全测评|实体店横评,一文搞定变现避坑 - 奢侈品回收评测
  • 猫抓Cat-Catch:5分钟掌握浏览器资源嗅探与智能下载
  • 如何为创维E900V22C电视盒子构建定制版CoreELEC系统
  • 2026 大连收藏!奢侈品回收优选,LV,迪奥当场验货当场打款 - 奢侈品回收评测
  • 毫欧表的测量电流
  • Kosaraju算法,从原理到实战:一次搞懂强连通分量
  • 考勤管理系统毕设源码
  • 神经符号AI×知识图谱:下一代可信AI的落地蓝图
  • 掌握AI专著撰写技巧,借助工具3天完成20万字专著!
  • ag-Grid Enterprise 27.2.0:解锁企业级数据网格的进阶特性与实战应用
  • FanControl深度实战指南:Windows系统风扇智能温控的5大专业技巧
  • 探访南京二手手表回收市场:为什么百达翡丽是顶奢回收硬通货? - 奢侈品回收评测
  • 嵌入式硬件设计基石:深入解读NXP K21F微控制器电气特性与工程实践
  • 飞思卡尔MSC7113低功耗DSP芯片:架构解析与嵌入式设计实践
  • 气象数据分析实战:利用Python和ARLreader库批量处理GDAS1数据并生成NetCDF
  • 面试官坏笑:“你用 AI 编程一年了,怎么保证 Claude Code 写出来的代码是对的?”我:“直接上 Claude Fable 5 啊!”
  • 保姆级教程:手把手教你用QML+GitCode源码复现一个离线地图标注工具(附完整项目)
  • 如何快速上手KaTrain:围棋AI训练终极指南
  • 网盘限速终结者:5分钟掌握终极网盘直链下载工具
  • 如何快速掌握ExtractorSharp:游戏资源编辑的终极开源工具指南
  • Vue3 + Element Plus:巧用动态组件实现el-icon状态切换与样式定制