显示链表数据时出错(缺少最后一个值)

时间:2017-07-27 19:00:12

标签: python data-structures linked-list

我正在努力实施linked list来研究数据结构。互联网上有很多优秀的资源,但我仍然不明白我的代码中哪些部分不起作用。

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

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

    def __repr__(self):
        temp = self.head
        alist = []
        while temp.Next is not None:
            alist.append(temp.data)
            temp = temp.Next
        return str(alist)

    def add(self, val):
        cur = self.head
        prev = None
        if cur is None:
            self.head = Node(val)
        else:
            while cur is not None:
                prev = cur
                cur = cur.Next
            prev.Next = Node(val)
        self.size += 1


if __name__ == '__main__':
    alist = LinkedList()
    for i in range(10):
        alist.add(i)
    print(alist)

""" [0,1,2,3,4,5,6,7,8]

我预计它打印出[0,1,2,3,4,5,6,7,8,9],但它错过了最后一个元素。有人可以告诉我我的add方法错过了什么吗? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

要清楚,我原来的add方法就像这样,

def add(self, val):
    temp = Node(val)
    temp.Next = self.head
    self.head = temp
    self.size += 1

然而,它增加了相反顺序的元素,如[9,8,7,6,5,4,3,2,1,0]。所以我将add更改为

def add(self, val):
        cur = self.head
        prev = None
        if cur is None:
            self.head = Node(val)
        else:
            while cur is not None:
                prev = cur
                cur = cur.Next
            prev.Next = Node(val)
        self.size += 1

我以前打印出链表中的所有元素没有问题,但是新方法不会打印出最后一个元素。这是__repr__问题而不是add。我改变了__repr__。谢谢@ inspectorG4dget