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

删除排序链表中的重复元素 II(LeetCode)

题目

给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。

解题

class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextclass Solution:def deleteDuplicates(self, head: ListNode) -> ListNode:# 创建一个虚拟头结点dummy = ListNode(0)dummy.next = headprev = dummywhile head:# 检查当前节点是否是重复节点if head.next and head.val == head.next.val:# 找到所有重复的节点while head.next and head.val == head.next.val:head = head.next# 跳过所有重复的节点prev.next = head.nextelse:# 如果没有重复,更新 prevprev = prev.next# 移动到下一个节点head = head.nextreturn dummy.next# 工具函数
def print_linked_list(head: ListNode):"""打印链表中的所有节点值"""current = headwhile current:print(current.val, end=" -> " if current.next else "\n")current = current.nextdef list_to_linked_list(values):"""将列表转换为链表"""if not values:return Nonedummy = ListNode(0)current = dummyfor value in values:current.next = ListNode(value)current = current.nextreturn dummy.nextdef linked_list_to_list(head: ListNode):"""将链表转换为列表"""result = []current = headwhile current:result.append(current.val)current = current.nextreturn result# 测试代码
if __name__ == "__main__":# 测试案例test_cases = [([1, 1, 1, 2, 3], [2, 3]),  # 删除重复元素后的链表([1, 1, 2, 3, 3], [2]),  # 删除重复元素后的链表([1, 2, 3, 4, 5], [1, 2, 3, 4, 5]),  # 无重复元素([1, 1, 2, 2, 3, 3], []),  # 所有元素都重复([1, 2, 3, 4, 4, 5, 5], [1, 2, 3])  # 删除重复元素后的链表]for i, (values, expected) in enumerate(test_cases):head = list_to_linked_list(values)solution = Solution()print(f"测试用例 {i + 1}: 原链表:", end="")print_linked_list(head)new_head = solution.deleteDuplicates(head)result = linked_list_to_list(new_head)print(f"删除重复元素后的链表:", end="")print_linked_list(new_head)assert result == expected, f"测试失败:期望 {expected}, 但得到 {result}"print("测试通过\n")

测试用例 1: 原链表:1 -> 1 -> 1 -> 2 -> 3
删除重复元素后的链表:2 -> 3
测试通过

测试用例 2: 原链表:1 -> 1 -> 2 -> 3 -> 3
删除重复元素后的链表:2
测试通过

测试用例 3: 原链表:1 -> 2 -> 3 -> 4 -> 5
删除重复元素后的链表:1 -> 2 -> 3 -> 4 -> 5
测试通过

测试用例 4: 原链表:1 -> 1 -> 2 -> 2 -> 3 -> 3
删除重复元素后的链表:测试通过

测试用例 5: 原链表:1 -> 2 -> 3 -> 4 -> 4 -> 5 -> 5
删除重复元素后的链表:1 -> 2 -> 3
测试通过

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 详解基于百炼平台及函数计算快速上线网页AI助手
  • [Python] ai音色翻译器
  • 安全基础学习-keil调试汇编代码
  • Linux 内核源码分析---块设备
  • C# 设计模式之简单工厂模式
  • GoLang 安装
  • 导出easyExcel(前端vue2/后端springboot)
  • Java 面试常见问题之——为什么重写equals时必须重写hashCode方法
  • thinkphp框架远程代码执行
  • MATLAB在算法处理上的作用
  • 鸿蒙系统学习指南
  • 学习大数据DAY30 python基础语法3
  • 渗透测试--DNS劫持实验
  • 5.0-软件工程基础知识-考点分析
  • 自用git命令(待完善)
  • php的引用
  • 【译】JS基础算法脚本:字符串结尾
  • Asm.js的简单介绍
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ES6系列(二)变量的解构赋值
  • ES学习笔记(12)--Symbol
  • Hexo+码云+git快速搭建免费的静态Blog
  • Hibernate【inverse和cascade属性】知识要点
  • IDEA常用插件整理
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript 基础知识 - 入门篇(一)
  • JS基础之数据类型、对象、原型、原型链、继承
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Linux gpio口使用方法
  • Odoo domain写法及运用
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • SpiderData 2019年2月23日 DApp数据排行榜
  • SQLServer之创建显式事务
  • Sublime Text 2/3 绑定Eclipse快捷键
  • 目录与文件属性:编写ls
  • 浅谈web中前端模板引擎的使用
  • 如何实现 font-size 的响应式
  • 深度解析利用ES6进行Promise封装总结
  • 提醒我喝水chrome插件开发指南
  • 微信开源mars源码分析1—上层samples分析
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • #if #elif #endif
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (02)Unity使用在线AI大模型(调用Python)
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (day6) 319. 灯泡开关
  • (Git) gitignore基础使用
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (一)WLAN定义和基本架构转
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)linux下的时间函数使用
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .env.development、.env.production、.env.staging
  • .NET 5种线程安全集合
  • .NET Compact Framework 多线程环境下的UI异步刷新