Python单链表-删除元素

Python单链表-删除元素,python,data-structures,Python,Data Structures,出于某种原因,我的remove_element方法不会删除包含元素的所有节点。为什么? class Node: def __init__(self, element): self.element = element self.next = None class SLL: def __init__(self): self.head = None # add a node to front def add_front

出于某种原因,我的remove_element方法不会删除包含元素的所有节点。为什么?

class Node:
    def __init__(self, element):
        self.element = element
        self.next = None

class SLL:
    def __init__(self):
        self.head = None

    # add a node to front
    def add_front(self, element):
        new_node = Node(element)
        if self.head == None:
            self.head = new_node
        else:
            new_node.next = self.head
            self.head = new_node

    # removes from the head
    def remove(self):
        if self.head == None:
            print "Error: the list is empty."
        else:
            self.head = self.head.next

    # removes all nodes which hold a given element
    def remove_element(self, element):
        previous = None
        cursor = self.head

        while cursor != None:
            if cursor.element == element:
                if cursor == self.head:
                    self.remove()
                else:
                    previous.next = cursor.next

            previous = cursor
            cursor = cursor.next

    # traverses the list and prints out its elements
    def print_list(self):
        cursor = self.head
        while (cursor != None):
            print(cursor.element)
            cursor = cursor.next

# Main
SLL = SLL()
SLL.add_front(21)
SLL.add_front(21)
SLL.add_front(1)
SLL.add_front(1)
SLL.add_front(1)
SLL.add_front(2)
SLL.add_front(3)
SLL.add_front(5)
SLL.add_front(8)
SLL.add_front(13)
SLL.add_front(21)
SLL.print_list()
print
SLL.remove_element(1)
SLL.print_list()
print
输出:

bash-3.2$ python SLL.py 
21
13
8
5
3
2
1
1
1
21
21

21
13
8
5
3
2
1 <--- What is this guy doing here?
21
21
bash-3.2$python SLL.py
21
13
8.
5.
3.
2.
1.
1.
1.
21
21
21
13
8.
5.
3.
2.

1删除元素时,无需移动
上一个
变量引用:

while cursor != None:
    if cursor.element == element:
        if cursor == self.head:
            self.remove()
        else:
            previous.next = cursor.next                
    else:
        previous = cursor

    cursor = cursor.next

否则,每次删除元素时,都会通过重新指定
previous
cursor
变量跳过下一个元素。

为什么要在Python中实现链表?除非是家庭作业,否则没有理由这么做。此外,PEP8建议在与
None
进行比较时使用
is
is
。只需修改数据结构并自学python@ThiefMaster谢谢将必须阅读整个风格建议文档。作为一项额外任务,一旦一切正常,添加一些类似于
\uuuuu iter\uuuuu
\uuuu包含
的内容将是一个不错的主意,这样您就可以使用常见的运算符/语句(
如果条形图中有foo
条形图中有foo
,等等)在您的结构上。
光标
仍然需要更改。无限循环:)但是谢谢,我明白了-我只需要调整cursor@interjay,是的,还有缩进问题。谢谢你指出错误!