簡體   English   中英

AttributeError: 'NoneType' 對象沒有屬性 'data' - 當我正在編寫一個函數來將一個元素插入到排序的鏈表中時

[英]AttributeError: 'NoneType' object has no attribute 'data' - when I'm writing a function to insert an element into sorted linked list

我正在編寫一個函數來實現插入排序的單鏈表。

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

class LinkedList:
    def __init__(self):
        self.head = None

    def isListEmpty(self):
        if self.head is None:
            return True
        return False

    def listLength(self):
        length = 0
        currentNode = self.head
        while currentNode is not None:
            length += 1
            currentNode = currentNode.next
        return length

    def insertAt(self, newNode, position):
        if position < 0 or position > self.listLength():
            print("Invalid Position")
            return
        elif position == 0:
            self.insertHead(newNode)
        else:
            currentPosition = 0
            currentNode = self.head
            while currentPosition is not position:
                currentPosition += 1
                previousNode = currentNode
                currentNode = currentNode.next
            newNode.next = currentNode
            previousNode.next = newNode

    def insertSort(self, newNode):
        if self.isListEmpty():
            self.insertEnd(newNode)
        else:
            currentPosition = 0
            currentNode = self.head
            while True:
                currentData = currentNode.data  # line with error
                if currentData <= newNode.data:
                    currentPosition += 1
                    currentNode = currentNode.next
            self.insertAt(newNode, currentPosition)

firstNode = Node(10)
link = LinkedList()
link.insertEnd(firstNode)
fifthNode = Node(25)
link.insertSort(fifthNode)

目前收到錯誤:

     currentData = currentNode.data
AttributeError: 'NoneType' object has no attribute 'data'

我什至無法猜測代碼有什么問題。 我嘗試使用print(currentNode.data)打印節點數據,但沒有顯示錯誤,僅在條件檢查期間出現錯誤。

while True:
currentData = currentNode.data  # line with error
if currentData <= newNode.data:
    currentPosition += 1
    currentNode = currentNode.next
self.insertAt(newNode, currentPosition)

在這里,您從未退出 while 循環。 因此,最終的 currentNode 將包含 None。 檢查您是否到達 LinkedList 的末尾並退出。

我還想補充一件事。

while currentPosition is not position:
            currentPosition += 1
            previousNode = currentNode
            currentNode = currentNode.next
        newNode.next = currentNode
        previousNode.next = newNode

InsertAt 函數中的這個循環你需要知道提到的位置是否正確。 假設位置總數為 25,輸入的位置為 30。現在您的循環將失敗,因為它永遠不會達到 30。因此您需要在 while 條件本身中添加一個退出循環說:

while ((currentPosition is not position) and (currentNode is not None))

現在代碼永遠不會失敗。

暫無
暫無

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

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