python双向链表 - insertAfter节点

时间:2017-10-20 14:52:31

标签: python iterator nodes doubly-linked-list

我创建一个python类来实现双向链表。我有一个DLL节点本身的单独类和列表的类。 这是我的DLL节点类:     class DLLNode:

def __init__(self,element,nextnode=None,prevnode=None,):

    self._element = element
    self._next = nextnode
    self._prev = prevnode

我有一个名为insertAfter(self,x,y)的方法,它在第一次出现x之后插入节点y。这是:

if self.size != 0:
        n = DLLNode(y)
        if self.head._element == x:
            n._next = self.head._next
            self.head._next._prev = n
            n._prev = self.head
            self.head._next = n
            self.size += 1

        elif self.tail._element == x:
            self.tail._next = n
            n._prev = self.tail
            n._next = None
            self.tail = n
            self.size += 1
        else:
            iterator = self.head._next
            while iterator._next is not None:
                if iterator._element == x:
                    n._next = iterator._next
                    iterator._next._prev = n
                    n._prev = iterator
                    iterator._next = n
                    self.size += 1
                else:
                    iterator = iterator._next

当我运行此函数时,该函数永远循环,当我自己杀死该函数时,错误返回到第4行最后一行iterator._next = n它没有说出任何其他这就是为什么我感到困惑。 非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:1)

在循环中

while iterator._next is not None:
then分支中

,您不会更改iterator值。在每次迭代中,条件iterator._next is not None(来自while循环)和if iterator._element == x:都是True(因为iterator包含相同的值)。你得到无限循环。尝试在break分支的末尾添加then