📌  相关文章
📜  数据结构示例-删除单向链表中重复的元素(1)

📅  最后修改于: 2023-12-03 14:54:57.285000             🧑  作者: Mango

数据结构示例-删除单向链表中重复的元素

在开发过程中,经常需要操作链表。其中一个常见的问题是如何删除链表中的重复元素。这篇文章将介绍如何使用Python语言删除单向链表中的重复元素。

单向链表

链表是一种常见的数据结构,是由一系列节点组成的。每个节点包含两部分内容,并的一部分是数据,另外一部分是指向下一个节点的指针。

单向链表是从第一个节点开始,每个节点都只有一个指针指向下一个节点。最后一个节点的指针指向空值。如下图:

单向链表

删除重复元素算法

我们需要定义一个函数,该函数将单向链表作为输入参数,并返回删除重复元素后的链表。具体步骤如下:

  1. 初始化一个字典,用于存储节点值的出现情况。
  2. 遍历链表。
  3. 如果当前节点的值在字典中出现过,则删除这个节点。
  4. 如果当前节点的值未在字典中出现过,则将这个值加入字典中。

算法实现如下:

def deleteDuplicates(head):
    '''
    :param head: ListNode
    :return: ListNode
    '''
    if not head or not head.next:
        return head

    val_set = set()
    val_set.add(head.val)

    pre = head
    cur = head.next
    while cur:
        if cur.val in val_set:
            pre.next = cur.next
        else:
            val_set.add(cur.val)
            pre = cur
        cur = cur.next

    return head
性能分析

该算法遍历链表一次,时间复杂度为O(n)。空间复杂度为O(n),因为需要用一个字典存储节点值的出现情况。

结论

通过本文,我们介绍了如何使用Python删除单向链表中的重复元素。该算法只需要遍历链表一次,时间复杂度为O(n),可以有效删除重复元素并保证不破坏链表的结构。