簡體   English   中英

如何在循環鏈表中的給定節點之后添加節點?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM