[英]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.