【问题标题】:Having trouble creating a Python Singly Linked List创建 Python 单链表时遇到问题
【发布时间】:2013-11-06 12:32:06
【问题描述】:

首先,我来自 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()

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

【问题讨论】:

  • 顺便说一句,很少有实际需要在python中创建这样的东西......如果它只是练习编码python那很好,但如果你计划在程序中重用它,那就更好了要使用的内置数据类型
  • 完成此操作后,您应该将 buildlist 定义中的 for i in array: 更改为 for i in range(len(array)): 编辑:再想一想,如果您这样做也会有所帮助对您提供的这个简单示例进行了更多说明,因为错误太多(!)以至于在不知道目的的情况下很难提出任何建议(除了明显的语法内容)。

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


【解决方案1】:

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

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

另外,在 Python 中,几乎所有地方都使用列表代替数组。你所谓的myArray 实际上是一个列表。遍历列表和其他可迭代对象是遍历 元素,而不是索引:

for element in your_list:
    do_something(element)

【讨论】:

  • 谢谢!我没有意识到迭代,显然这是一个巨大的错误。与我以前见过的任何东西都非常不同。它也不同,因为在 C++/Java 中,this 关键字并不总是必需的。反正我修好了。
【解决方案2】:

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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2022-01-15
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多