Python 将linkedList节点设置为“无”不会清除父链接
在我的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
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处的节点。