python进阶练习题:链接列表 - 删除重复项【难度:2级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

python进阶练习题:链接列表 - 删除重复项【难度:2级】:

链接列表 - 删除重复项

编写一个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

上一篇:Python json解析器允许重复键


下一篇:在JavaScript中复制数组的最快方法 – 切片与’for’循环