Python链接列表追加

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)

为什么测试会返回该错误以及如何修复我的追加方法?

mu *_*u 無 9

问题在于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你没有更新的变量.您可能也希望更新相同的内容.