链接列表 - 删除重复项
编写一个RemoveDuplicates()函数,该函数采用按递增顺序排序的列表
从列表中删除任何重复的节点.理想情况下,列表只能遍历一次.应返回结果列表的头部.
var list = 1 - > 2 - > 3 - > 3 - > 4 - > 4 - > 5 - > null
removeDuplicates(list)=== 1 - > 2 - > 3 - > 4 - > 5 - > null
如果传入的列表为null / None / nil,则只返回null.
注意:您的解决方案应该适用于长列表.由于堆栈大小限制,递归解决方案可能会失败.
不需要重新定义push()和buildOneTwoThree()函数.
相关的Kata按预期完成顺序(增加难度):
链接列表 - Push&BuildOneTwoThree
链接列表 - 长度和计数
链接列表 - 获取第N个节点
链接列表 - 插入第N个节点
链接列表 - 排序插入
链接列表 - 插入排序
链接列表 - 附加
链接列表 - 删除重复项
链接列表 - 移动节点
链接列表 - 将节点移动到位
链接列表 - 交替拆分
链接列表 - 前后方拆分
链接列表 - 随机合并
链接列表 - 排序合并
链接列表 - 合并排序
链接列表 - 排序相交
链接列表 - 迭代反转
链接列表 - 递归反转
灵感来自斯坦福大学教授Nick Parlante的优秀[Linked List教学].(http://cslibrary.stanford.edu/103/LinkedListBasics.pdf)
class Node(object):
def __init__(self, data):
self.data = data
self.next = None
def remove_duplicates(head):
# Your code goes here.
# Remember to return the head of the list.
test.it("should be able to handle an empty list.")
test.assert_equals(remove_duplicates(None), None, "removing duplicates from None should return None.")
test.it("should be able to handle a list of length 1.")
test.assert_equals(remove_duplicates(Node(23)).data, 23, "removing duplicates from linked list consisting of one node should return the node.")
test.it("should be able to handle a list without duplicates.")
assert_linked_list_equals(remove_duplicates(build_one_two_three()), (), "removing duplicates from a linked list without duplicates node should return the list.")
assert_linked_list_equals(remove_duplicates(build_one_two_three_four_five_six()), build_one_two_three_four_five_six(), "removing duplicates from linked list without duplicates node should return the list.")
assert_linked_list_equals(remove_duplicates(build_list([1, 2, 2])), build_list([1, 2]), "should remove the duplicate '2' entries")
assert_linked_list_equals(remove_duplicates(build_list([1, 1, 1, 1, 1])), build_list([1]), "should remove the duplicate '1' entries")
assert_linked_list_equals(remove_duplicates(build_list([1, 2, 3, 3, 4, 4, 5])), build_list([1, 2, 3, 4, 5]), "should remove the duplicate '3' and '4' entries")
assert_linked_list_equals(remove_duplicates(build_list([1, 1, 1, 1, 2, 2, 2, 2])), build_list([1, 2]), "should remove the duplicate '1' and '2' entries")
点击查看答案
python高级练习题:减少方向【难度:3级】–景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
python进阶练习题:方形绳子上衣【难度:2级】–景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
python进阶练习题:异常处理(有限制)【难度:2级】–景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
python高级练习题:懒惰的初始【难度:4级】–景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
python基础练习题:问候【难度:1级】–景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
本博客所有编程题目及答案均收集自互联网,主要用于供网友学习参考,如有侵犯你的权益请联系管理员及时删除,谢谢
题目收集至https://www.codewars.com/
https://www.codewars.com/kata/linked-lists-remove-duplicates