[英]AttributeError: 'NoneType' object has no attribute 'data' Linked List
[英]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.