New*_*bie 2 python linked-list append
我为一个UnorderedList()类创建了一个append方法,它在我的IDLE窗口中工作正常但是当它被分配给大学的测试时:
my_list = UnorderedList()
my_list.append(13)
for num in my_list:
print(num, end=" ")
print()
Run Code Online (Sandbox Code Playgroud)
它返回一个错误:AttributeError: Nonetype object has no attribute 'getNext'.
这是append方法:
def append(self,item):
current = self.head
while current.getNext() != None:
current = current.getNext()
current.setNext(Node(item))
Run Code Online (Sandbox Code Playgroud)
这是我的其他类和代码:
class Node:
def __init__(self,initdata):
self.data = initdata
self.next = None
def getData(self):
return self.data
def getNext(self):
return self.next
def setData(self,newdata):
self.data = newdata
def setNext(self,newnext):
self.next = newnext
class UnorderedList:
def __init__(self):
self.head = None
self.count = 0
def append(self,item):
current = self.head
while current.getNext() != None:
current = current.getNext()
current.setNext(Node(item))
Run Code Online (Sandbox Code Playgroud)
为什么测试会返回该错误以及如何修复我的追加方法?
问题在于append方法:
def append(self,item):
current = self.head
while current.getNext() != None:
current = current.getNext()
current.setNext(Node(item))
Run Code Online (Sandbox Code Playgroud)
在第一次迭代中,currentis 的值最初self.head设置为None,并且您不检查它.
所以相反,改变这一点并在下面引入对此条件的检查:
def append(self,item):
current = self.head
if current:
while current.getNext() != None:
current = current.getNext()
current.setNext(Node(item))
else:
self.head = Node(item)
Run Code Online (Sandbox Code Playgroud)
PS:你也在使用一个self.count你没有更新的变量.您可能也希望更新相同的内容.