有问题的部分在函数remove
中。即使在调用del
之后,也不会从链接列表中删除相关节点。我误解了del
的某些内容吗?
class Node:
def __init__(self, val):
self.val = val
self.next = None
def add(self, val):
if not (self.next):
self.next = Node(val)
else:
self.next.add(val)
def remove(self, val):
if self.val == val:
if self.next:
self.val = self.next.val
self.next = self.next.next
else:
del self # this doesn't remove the node from linked list
else:
if self.next:
self.next.remove(val)
else:
print "no such val found %d" % val
def __str__(self):
output = []
while self is not None:
output.append(str(self.val))
self = self.next
return " -> ".join(output)
head = Node(1)
head.add(2)
print head
head.remove(3)
head.add(3)
head.add(4)
print head
head.remove(3)
head.remove(4)
print head
答案 0 :(得分:1)
语句del self
仅从本地范围中删除名称self
(并减少引用计数)。它对其它对它的引用或那些对象都没有影响。
要从链接列表中删除节点,您必须更新引用它的节点。由于您有单个链接列表,因此必须从头开始遍历列表以查找node.next == self
的节点,然后将其更改为node.next = self.next
以从链接序列中删除self。