将linkedList节点设置为None不会清除父链接

时间:2015-09-21 15:45:17

标签: python

在我的linkedList中,这是我实现删除方法的方法。

def remove(self,key):
        if self.head is None:
            return

        z = self.head

        while (z.key != key and z.next is not None):
            z = z.next


        if (z.key == key):
            if z.next is None:
                z = None 
            else:
                z.key = z.next.key
                z.value = z.next.value
                z.next = z.next.next

            self.size -= 1 

我遇到的问题是,如果节点z没有next,则将其设置为none。但是以下代码

w = LinkedList("A",5)
w.append("B", 7)
w.append("C",10)
w.remove("C")

最后会打印A, B, C。这里的预期行为是A和B打印。为什么将z设置为none,而不是将该节点的父节点引用设置为None?

1 个答案:

答案 0 :(得分:1)

您的删除方法错误,使用下一个节点的值设置当前节点的值将不起作用(它将复制下一个节点)。

此外,将z局部变量设置为None不会对实际链接列表产生任何影响。

您需要做的删除操作是迭代直到下一个节点具有相同key的节点和该节点的下一个节点指向下一个节点的下一个节点。示例 -

def remove(self,key):
    if self.head is None:
        return
    if self.head.key == key:
        self.head = self.head.next
        return        
    z = self.head
    while z.next is not None and z.next.key != key:
        z = z.next

    if (z.next.key == key):
        z.next = z.next.next
        self.size -= 1