删除排序链表中的重复元素 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
测试通过

相关内容

热门资讯

为了进一步!微乐小程序免费黑科... 为了进一步!微乐小程序免费黑科技,微信微乐陕西小程序辅助器(作弊器)手段教程(果然真的有挂)破解侠是...
透视解迷!微乐小程序黑科技(外... 透视解迷!微乐小程序黑科技(外挂),微信小程序微乐辅助,教程指南书(有挂秘籍)-哔哩哔哩1. 选牌创...
透视新版!微乐小程序黑科技,微... 透视新版!微乐小程序黑科技,微信小程序黑科技免费(透视)其实是真的挂(有挂教学)-哔哩哔哩1、用户打...
据公告内容!浙江宝宝游戏万能辅... 据公告内容!浙江宝宝游戏万能辅助器,新世界辅助器,指南教程(有挂教学)-哔哩哔哩1、任何浙江宝宝游戏...
据统计!微乐小程序黑科技,微信... 据统计!微乐小程序黑科技,微信小程序微乐房间有挂吗(作弊器)秘籍教程(一直真的是有挂)1、进入到是否...
透视科普!微乐小程序黑科技(外... 透视科普!微乐小程序黑科技(外挂),广西微乐小程序辅助器,教程积累(有挂技巧)-哔哩哔哩1、免费辅助...
透视科技!微乐小程序免费黑科技... 透视科技!微乐小程序免费黑科技,微乐小程序透视挂(透视)一贯是有挂(有挂神器)-哔哩哔哩1、透视科技...
此事引发网友热议!传送屋激k辅... 此事引发网友热议!传送屋激k辅助器下单,新西部辅助,窍要教程(真是有挂)-哔哩哔哩1、传送屋激k辅助...
出现新变化!微乐小程序黑科技,... 出现新变化!微乐小程序黑科技,微乐小程序自建房透视下载(作弊器)模板教程(确实是有挂)该软件可以轻松...
透视安装!微乐小程序免费黑科技... 透视安装!微乐小程序免费黑科技,微乐小程序透视挂(透视)一贯是有挂(有挂教学)-哔哩哔哩一、游戏安装...