簡體   English   中英

NoneType錯誤:Python雙鏈表

[英]NoneType Error: Python Doubly Linked List

陷入因使用我的函數而導致的NoneType錯誤的解決方案中,將以下代碼添加並追加到一個空的Double_list類對象中。 最好的避免方法?

class Dbl_Node:

    def __init__(self, data):
        self.data = data
        self.next = None
        self.prev = None

class Double_list:

    def __init__(self): # Creates initial list w/ head and tail as None
        self.head = None
        self.tail = None

    def add(self, item): # adds node to beginning/head of list
        temp = self.head
        self.head = Dbl_Node(item)
        temp.prev = self.head
        self.head.next = temp

    def append(self, item): # adds node to end/tail of list
        temp = self.tail
        self.tail = Dbl_Node(item)
        self.tail.prev = temp
        temp.next = self.tail

您正在將headtail初始化為None ,但是然后在插入第一個Dbl_Node時嘗試在它們上設置prevnext成員。

def add(self, item):
    temp = self.head # on the first call to "add", self.head is None
                     # (as set in __init__) so temp is now None

    self.head = Dbl_Node(item) # create a new node and assign it to self.head
                               # this is fine

    temp.prev = self.head # this says assign the new node in self.head to the "prev"
                          # member of temp, however temp is None so the temp.prev part
                          # throws the error

你應該檢查這種情況

def add(self, item): # adds node to beginning/head of list
    temp = self.head
    self.head = Dbl_Node(item)
    if temp is not None:
        temp.prev = self.head

另一種解決方案是從頭和尾的“虛擬”節點開始:

def __init__(self):
    self.head = Dbl_Node(None)
    self.tail = Dbl_Node(None)
    self.head.next = self.tail
    self.tail.prev = self.head

然后在這些節點之間插入項目

def add(self, item):
    temp = self.head.next
    self.head.next = Dbl_Node(item)
    temp.prev = self.head.next
    self.head.next.next = temp

盡管我發現這會使事情不必要地復雜化。

def append(self, item): # adds node to end/tail of list
        temp = self.tail
        self.tail = Dbl_Node(item)
        self.tail.prev = temp
        temp.next = self.tail

這將始終引發NoneType異常,因為self.tail最初是None然后您self.tail它的引用( None )分配給temp並嘗試將某些內容分配給None 不行

您可能需要首先為self.tail分配一個新的對象引用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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