python双向链表-insertAfter节点
python doubly linked list - insertAfter node
我正在创建一个 python class 来实现双向链表。我有一个单独的 class 用于 DLL 节点本身和一个 class 用于列表。
这是我的 DLL 节点 class:
class DLL 节点:
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
它没有说任何其他东西,这就是为什么我很困惑。
非常感谢任何帮助:)
循环中
while iterator._next is not None:
在 then
分支中,您不会更改 iterator
值。在每次迭代中,条件 iterator._next is not None
(来自 while 循环)和 if iterator._element == x:
都是 True
(因为 iterator
包含相同的值)。然后你得到无限循环。尝试在 then
分支的末尾添加 break
。
我正在创建一个 python class 来实现双向链表。我有一个单独的 class 用于 DLL 节点本身和一个 class 用于列表。 这是我的 DLL 节点 class: class DLL 节点:
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
它没有说任何其他东西,这就是为什么我很困惑。
非常感谢任何帮助:)
循环中
while iterator._next is not None:
在 then
分支中,您不会更改 iterator
值。在每次迭代中,条件 iterator._next is not None
(来自 while 循环)和 if iterator._element == x:
都是 True
(因为 iterator
包含相同的值)。然后你得到无限循环。尝试在 then
分支的末尾添加 break
。