在我的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?
答案 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