我创建一个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
它没有说出任何其他这就是为什么我感到困惑。
非常感谢任何帮助:)
答案 0 :(得分:1)
在循环中
while iterator._next is not None:
在then
分支中,您不会更改iterator
值。在每次迭代中,条件iterator._next is not None
(来自while循环)和if iterator._element == x:
都是True
(因为iterator
包含相同的值)。你得到无限循环。尝试在break
分支的末尾添加then
。