删除链表中给定键的所有出现

2025年3月17日 | 阅读 3 分钟

相关列表是一种线性数据结构,其中每个元素都是一个单独的项。列表中的每个元素(我们将称之为节点)包含两项——数据和一个指向下一个节点的引用。最后一个节点有一个指向 null 的引用。访问相关列表的入口点称为列表的头。应该注意的是,头不是一种独立的节点类型,而是指向第一个节点的引用。如果列表为空,则头为 null 引用。

在 Python 中,我们没有内置的列表作为内置数据类型,但我们可以创建一个类来实现列表的概念。在我们的实现中,链表中的节点由 Node 类的实例表示,该类具有属性:data 和 next。data 属性包含我们要存储的数据,而 next 是指向列表中下一个节点的链接。

我们的实现中的 deleteKey() 方法用于删除链表中给定键的所有出现项。它通过遍历链表并删除包含给定键的节点来实现。如果键位于列表的头部,它会将头部更新为下一个节点。对于位于其他位置的键,它会更新前一个节点的“next”引用以跳过包含键的节点。这有效地从链表中删除了键的所有出现项。

这是一个简单的 Python 代码片段,用于删除链表中给定键的所有出现项。

输出

Delete all occurrences of a given key in a linked list

在此代码中,我们首先使用 append 方法创建一个链表。然后,我们调用 deleteKey() 方法来删除给定键的所有出现项。最后,我们在删除操作后打印链表。deleteKey() 方法通过遍历链表并删除包含给定键的节点来实现。如果键位于列表的头部,它会将头部更新为下一个节点。对于位于其他位置的键,它会更新前一个节点的“next”引用以跳过包含键的节点。这有效地从链表中删除了键的所有出现项。请注意,此代码假定给定的键存在于链表中。如果链表中不存在该键,则该方法不会进行任何更改。

在链表中删除给定键的所有出现项的**时间复杂度**为 **O(n)**,其中 n 是链表中的节点数。这是因为在最坏的情况下,我们可能需要遍历链表中的所有节点。

该函数的**辅助空间复杂度**为 **O(1)**。这是因为我们没有使用任何额外的、与输入大小成比例的空间。我们只使用固定量的空间来存储临时变量,而与链表的大小无关。因此,空间复杂度是常数。