无法创建Python单链接列表

时间:2013-10-27 20:05:38

标签: python data-structures singly-linked-list

首先,我来自C / C ++ / Java的背景。我决定学习Python以扩展我的技能,并希望深入研究一些Web开发。我只学习了大约两天,我一直在尝试创建一些简单的数据结构。

我收到了很多错误,我无法弄清楚该做什么!我试图研究它,我仍然无法弄明白。我收到传递给我的LinkedList成员函数的位置参数数量的错误,当我拿出它们时,它说我的Node函数定义中没有定义self。

class Node:

    def __init__():
        self.data = None
        self.nextNode = None  

    def set_and_return_Next():
        self.nextNode = Node()
        return self.nextNode

    def getNext():
        return self.nextNode

    def getData():
        return self.data

    def setData(d):
        self.data = d


class LinkedList:

    def buildList(array):
        head = Node()
        head.setData(array[0])
        temp = head
        for i in array:
            temp = temp.set_and_return_Next()
            temp.setData(array[i])
            tail = temp
        return self.head

    def printList():
        tempNode = head
        while(tempNode!=tail):
            print(tempNode.getData())
            tempNode = tempNode.getNext()

myArray = [3, 5, 4, 6, 2, 6, 7, 8, 9, 10, 21]

myList = LinkedList()
myList.buildList(myArray)
myList.printList()

我知道他们可能是愚蠢的错误,但请帮助。

2 个答案:

答案 0 :(得分:5)

在Python中(与C ++不同),每个实例方法都有一个隐含的第一个参数:类的实例。根据惯例,它被称为self

def some_method(self, arg1, ...):

此外,在Python中,您几乎可以在任何地方使用列表代替数组。您所谓的myArray实际上是一个列表。迭代列表和其他迭代迭代元素,而不是索引:

for element in your_list:
    do_something(element)

答案 1 :(得分:1)

OP写道:

  

修正了它!这是新代码:

#Matthew's Simple Python
# Practice Linked List
class Node:

    def __init__(self):
        self.data = None
        self.nextNode = None  

    def set_and_return_Next(self):
        self.nextNode = Node()
        return self.nextNode

    def getNext(self):
        return self.nextNode

    def getData(self):
        return self.data

    def setData(self, d):
        self.data = d

class LinkedList:

    def buildList(self, array):
        self.head = Node()
        self.head.setData(array[0])
        self.temp = self.head
        for i in array[1:]:
            self.temp = self.temp.set_and_return_Next()
            self.temp.setData(i)
            self.tail = self.temp
        return self.head

    def printList(self):
        tempNode = self.head
        while(tempNode!=self.tail):
            print(tempNode.getData())
            tempNode = tempNode.getNext()
        print(self.tail.getData())

myArray = [3, 5, 4, 6, 2, 6, 7, 8, 9, 10, 21]

myList = LinkedList()
myList.buildList(myArray)
myList.printList()
     

这是输出:

>>> 
3
5
4
6
2
6
7
8
9
10
21