Python 将linkedList节点设置为“无”不会清除父链接

Python 将linkedList节点设置为“无”不会清除父链接,python,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 i

在我的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没有下一个节点,则将其设置为“无”。但是下面的代码

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

将在最后打印出
A、B、C
。这里的预期行为是打印A和B。为什么将z设置为“无”,而不将该节点的父节点引用也设置为“无”

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

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

要删除,您需要做的是迭代,直到下一个节点具有相同的
键的节点,并将该节点的下一个设置为指向下一个节点的下一个。范例-

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 

您是否希望
a=[];b=a;b=None
以某种方式将
a
更改为
None
,这就是您的建议。您必须显式地将
parent.next
设置为
z.next
。如果节点的next为None,会发生什么情况?如果
z.next.next
为None,意味着在最后一个节点找到了键,它会将
B
节点的next设置为
None
使其成为最后一个节点。啊,我现在看到您接下来测试节点,但是,如果头部是唯一的节点,并且没有下一个节点,则需要进行特殊处理。另外,为什么局部变量不影响实际的linkedList?因为它们是局部变量?在函数的本地,当函数退出时,它们会被破坏。我在上面的回答中遇到的问题是,如果head是唯一的节点,并且它是键,则永远不会删除head处的节点。