使用“del”从链接列表中删除节点不起作用

时间:2015-10-02 20:17:08

标签: python

有问题的部分在函数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

1 个答案:

答案 0 :(得分:1)

语句del self仅从本地范围中删除名称self(并减少引用计数)。它对其它对它的引用或那些对象都没有影响。

要从链接列表中删除节点,您必须更新引用它的节点。由于您有单个链接列表,因此必须从头开始遍历列表以查找node.next == self的节点,然后将其更改为node.next = self.next以从链接序列中删除self。