删除排序链表中的重复元素 II(LeetCode)
创始人
2024-11-14 14:04:06
0次

题目

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

解题

class ListNode:     def __init__(self, val=0, next=None):         self.val = val         self.next = next   class Solution:     def deleteDuplicates(self, head: ListNode) -> ListNode:         # 创建一个虚拟头结点         dummy = ListNode(0)         dummy.next = head         prev = dummy          while 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.next             else:                 # 如果没有重复,更新 prev                 prev = prev.next              # 移动到下一个节点             head = head.next          return dummy.next   # 工具函数 def print_linked_list(head: ListNode):     """打印链表中的所有节点值"""     current = head     while current:         print(current.val, end=" -> " if current.next else "\n")         current = current.next   def list_to_linked_list(values):     """将列表转换为链表"""     if not values:         return None     dummy = ListNode(0)     current = dummy     for value in values:         current.next = ListNode(value)         current = current.next     return dummy.next   def linked_list_to_list(head: ListNode):     """将链表转换为列表"""     result = []     current = head     while current:         result.append(current.val)         current = current.next     return 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智... 实测交流透视挂!宝玛大厅ai智能透视挂教程,宝玛大厅破解软件经验(本来有挂辅助)1、每一步都需要思考...
总算了解辅助器!朱雀吴江三缺一... 总算了解辅助器!朱雀吴江三缺一ai智能透视辅助挂技巧,朱雀吴江三缺一好像是有挂(有辅助挂细节)朱雀吴...
今日公布透视!九五至尊大厅ai... 今日公布透视!九五至尊大厅ai智能透视插件,九五至尊大厅有没有透视挂窍门(切实有挂技术)1、在九五至...
玩家必看科普开挂!聚闲麻将ai... 玩家必看科普开挂!聚闲麻将ai智能透视辅助挂软件,聚闲麻将总是真的有挂(有辅助挂方式)聚闲麻将能透视...
据报道开挂!旅游娱乐ai智能开... 据报道开挂!旅游娱乐ai智能开挂工具,旅游娱乐辅助工具演示(一直有挂教学)1、全新机制【旅游娱乐ai...
一分钟揭秘开挂!决胜朋来麻将a... 一分钟揭秘开挂!决胜朋来麻将ai智能透视辅助挂教程,决胜朋来麻将真是真的是有挂(有辅助挂总结)1、首...
如何分辨真伪透视!红牛ai智能... 如何分辨真伪透视!红牛ai智能透视攻略,红牛是不是有挂经验(真是有挂技术)1、操作简单,无需红牛手机...
2分钟细说辅助器!江湖大庆麻将... 2分钟细说辅助器!江湖大庆麻将ai智能透视辅助挂攻略,江湖大庆麻将竟然是真的有挂(有辅助挂头条)1、...
总算清楚透视挂!老夫子厅ai智... 总算清楚透视挂!老夫子厅ai智能透视挂技巧,老夫子厅怎么开挂课程(好像发现有挂)老夫子厅破解侠是真的...
解密关于辅助!菜鸟麻将ai智能... 解密关于辅助!菜鸟麻将ai智能透视辅助挂脚本,菜鸟麻将总是存在有挂(有辅助挂存在)1、用户打开应用后...