[英]how to add a node after a given node in circular linked list?
下面是在给定节点之后添加节点的代码片段。 但是,它不起作用。 据我了解,节点的添加方式与我们在单链表中添加节点的方式相同。 因此,我尝试实施一些更改,但没有用。
class Node:
def __init__(self, data):
self.data = data
self.nxt = self
class cirLL:
def __init__(self):
self.lst = None
def addEnd(self, val):
nu = Node(val)
if self.lst is None:
self.lst = nu
else:
nu.nxt = self.lst.nxt
self.lst.nxt = nu
self.lst = nu
def addaftr(self, pos, val):
tmp = self.lst.nxt
while tmp != self.lst:
if tmp.data == pos:
break
tmp = tmp.nxt
if tmp is None:
print(pos, "not present")
else:
nu = Node(val)
nu.nxt = tmp.nxt
tmp.nxt = nu
def disply(self):
if not self.lst:
return # nothing to print
tmp = self.lst.nxt
print(tmp.data)
while tmp != self.lst:
tmp = tmp.nxt
print(tmp.data)
rew = cirLL()
rew.addaftr(30, 456)
rew.addEnd(23)
rew.addEnd(30)
rew.addEnd(90)
rew.disply()
我收到以下错误:
AttributeError: 'NoneType' object has no attribute 'nxt'
不确定可能出了什么问题。 请建议。
问题很明显:
tmp = self.lst.nxt
上面的语句假设self.lst
不是None
,但最初它是。 因此,你得到了你得到的错误。
就像addEnd
方法一样,您应该首先测试self.lst
是否可能是None
并采取相应的行动。
您可以按如下方式修复它:
def addaftr(self, pos, val):
if self.lst is None:
print(pos, "not present")
return
# rest of your code
名称pos
具有误导性。 首先我认为该方法旨在在列表中的position处插入一个节点,但事实证明pos
是一个列表值而不是position 。
当您的列表中还没有节点时,您想在值30之后插入一个节点有点奇怪。 你真的是故意的吗?
另一个问题是这种情况永远不会成立:
if tmp is None
由于您的列表是循环的, tmp
只会lst
第一个节点,但它永远不会变成None
。 此外,您的循环不会检查列表中的最后一个节点是否有您要查找的数据。 if
应该替换为:
if tmp.data:= pos:
当要查找的值恰好在最后一个节点时,则在插入后需要将lst
引用适配为新插入的节点。 所以在else
块的末尾添加:
if tmp == self.lst: self.lst = nu
这是更正后的代码:
def addaftr(self, findval, val):
if self.lst is None:
print(findval, "not present")
return
tmp = self.lst.nxt
while tmp != self.lst:
if tmp.data == findval:
break
tmp = tmp.nxt
if tmp.data != findval:
print(findval, "not present")
else:
nu = Node(val)
nu.nxt = tmp.nxt
tmp.nxt = nu
if tmp == self.lst:
self.lst = nu
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.