📌  相关文章
📜  用于从未排序的链表中删除重复项的Python程序(1)

📅  最后修改于: 2023-12-03 15:27:10.203000             🧑  作者: Mango

用于从未排序的链表中删除重复项的Python程序

在链表中,重复项可能会影响查询和其他操作的效率。因此,我们需要一个程序来删除链表中的重复项。这个Python程序能够很好地进行这项工作,可以用于从未排序的链表中删除重复项。

程序思路

该程序的思路如下:

  • 遍历链表,将链表中的每个元素存储在一个列表中。
  • 创建一个新的链表,将每个元素从列表中添加到新链表中,同时跳过重复的元素。
代码实现

以下是我们的Python实现:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def deleteDuplicates(head: ListNode) -> ListNode:
    # 遍历链表,将链表中的每个元素存储在列表中
    val_list = []
    node = head
    while node != None:
        val_list.append(node.val)
        node = node.next
    
    # 创建新链表,将每个元素从列表中添加到新链表中,同时跳过重复的元素
    new_head = ListNode(-1)
    node = new_head
    for val in val_list:
        if val_list.count(val) == 1:
            node.next = ListNode(val)
            node = node.next
    return new_head.next

这个程序使用了一个新的链表,我们遍历原链表将每个元素添加到列表中。然后,我们创建一个新链表,并将列表中的每个元素添加到新链表中,同时跳过重复的元素。

测试样例

以下是一个测试样例:

node1 = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)
node4 = ListNode(2)
node5 = ListNode(1)

node1.next = node2
node2.next = node3
node3.next = node4
node4.next = node5

new_head = deleteDuplicates(node1)

node = new_head
while node != None:
    print(node.val)
    node = node.next

该测试样例删除了节点2和节点1。输出结果如下:

3
总结

这个Python程序可以有效地从未排序的链表中删除重复项。它使用了一个新的链表,编写简单,易于理解和实现。