从python中的链表中删除一个元素

时间:2015-10-29 15:26:38

标签: python list

我想知道你是否有人可以让我介绍一下如何从python中的链表中删除一个元素,我不是要求代码,而只是一种英文的伪算法。例如,我有链表 1 - > 2 - > 2 - > 3 - > 4我想删除2中的一个我将如何做到这一点?我想到遍历链表,检查其中一个节点的数据是否等于后面节点的数据,如果它是删除它。但我在删除部分时遇到了麻烦。谢谢!

5 个答案:

答案 0 :(得分:1)

您需要维护两个指针

  1. 一种方法是检查当前节点的数据是否与要删除的值相同
  2. 另一个指针是保持前一节点对当前节点的引用。这是必需的,因为删除当前节点时,需要将当前节点的下一个指向当前节点的前一个。

以下是在python中执行相同操作的代码:

def remove(self, val):
    if self.head == val:
        self.head = self.head.next
        return

    tmp = self.head.next
    tmp_prev = self.head

    while tmp.next is not None:
        if tmp.data == val:
             tmp_prev.next = tmp.next
        tmp = tmp.next
        tmp_prev = tmp.next

    return

答案 1 :(得分:0)

您不需要“删除”节点,只需“跳过”它。也就是说,将Node1的 next 成员更改为第二个Node2。

如果您想要特定的代码示例(这是此网站的标准),请编辑您的问题。

答案 2 :(得分:0)

You can do something like:

if element.next.value == element.value: element.next = element.next.next

Just be carefull to free the memory if you are programing this in C/C++ or other language that does not have GC

答案 3 :(得分:0)

Instead of deleting the element, all you need to do is change the pointer. For example, you want the previous element of the node you want to delete to point to the element after the element you want to delete:

node is what you want to delete

node.parent.next = node.next

答案 4 :(得分:0)

如果您想在两端实现带有快速追加和弹出操作的类似列表的容器,我强烈建议从容器库https://docs.python.org/2/library/collections.html

中使用deque模块。