您的位置:首页 > 财经 > 金融 > 删除排序链表中的重复元素 II(LeetCode)

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

2024/12/23 15:00:40 来源:https://blog.csdn.net/weixin_74254879/article/details/140881450  浏览:    关键词:删除排序链表中的重复元素 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
测试通过

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com