Python 创建LinkedList时出错
因此,对于不同语言的数据结构实践,我决定用python创建一个链表 现在这里是我的代码,到目前为止,它还远未完成,但我遇到了这个错误,我似乎无法向自己指出它的来源:Python 创建LinkedList时出错,python,linked-list,Python,Linked List,因此,对于不同语言的数据结构实践,我决定用python创建一个链表 现在这里是我的代码,到目前为止,它还远未完成,但我遇到了这个错误,我似乎无法向自己指出它的来源: class LinkedNode: def __init__(self, value): self.value = value self.nextNode = None class LinkedList: def __init__(self): self.headNo
class LinkedNode:
def __init__(self, value):
self.value = value
self.nextNode = None
class LinkedList:
def __init__(self):
self.headNode = None
def isEmpty(self):
return self.headNode == None
def addToHead(self, value):
head = LinkedNode(value)
def removeFromHead(self):
head = self.headNode
self.headNode = self.headNode.nextNode
return head
def addToTail(self, value):
if self.headNode == None:
self.addToHead(value)
else:
tmp = self.headNode
while tmp.nextNode != None:
tmp = tmp.nextNode
tmp.nextNode = LinkedNode(value)
def empty(self):
self.headNode = None
def contains(self, value):
tmp = self.headNode
while tmp.nextNode != None:
if tmp.value == value:
return true
tmp = tmp.nextNode
return False
def toString(self):
tmp = self.headNode
buffer = '['
while tmp.nextNode != None:
buffer = buffer + str(tmp.value) + ', '
tmp = tmp.nextNode
buffer = buffer + ']'
list = LinkedList()
list.addToHead(1)
list.addToHead(2)
list.addToTail(3)
list.toString()
以下是错误:
回溯(最近一次呼叫最后一次):
文件“path/linkedList.py”,第52行,在
list.toString()
文件“path/linkedList.py”,第44行,在toString中
while tmp.nextNode != None:
AttributeError:“非类型”对象没有属性“nextNode”
[在0.138s内完成]
你的addToHead方法没有副作用。你可能是说
def addToHead(self, value):
head = LinkedNode(value)
head.nextNode = self.headNode
self.headNode = head
此外,toString将因空列表而崩溃。您的addToHead方法没有副作用。你可能是说
def addToHead(self, value):
head = LinkedNode(value)
head.nextNode = self.headNode
self.headNode = head
此外,toString将因空列表而崩溃
head=LinkedNode(value)
,希望LinkedList
的head
被覆盖。但是,实际情况是创建一个名为head
的局部变量,并将LinkedNode(value)
的值赋给它。因此,head
总是None
。显然,您不能执行None.nextNode
(因为它不是对象)
解决方案:您实际需要的是self.head=LinkedNode(value)
<代码>自我是对正在使用的对象的引用
头设置为新节点,您将失去对以前现有节点的引用
解决方案:您需要的是:
def addToHead(self, value):
tmp = LinkedNode(value)
tmp.nextNode = self.headNode
self.headNode = tmp
b<在其他编程语言中,code>toString
是将对象表示为字符串的一种流行方式,但python的方法是重写对象的\uu str\uuu()
和\uu repr\uu()
方法
解决方案(我坚持使用您的格式,尽管它可能需要一些更改;):
c。toString
方法有几处错误(headNode
未打印,将失败headNode
为None
等),但我不会尝试修复它们,因为我们有上面的解决方案
head=LinkedNode(value)
,希望LinkedList
的head
被覆盖。但是,实际情况是创建一个名为head
的局部变量,并将LinkedNode(value)
的值赋给它。因此,head
总是None
。显然,您不能执行None.nextNode
(因为它不是对象)
解决方案:您实际需要的是self.head=LinkedNode(value)
<代码>自我是对正在使用的对象的引用
头设置为新节点,您将失去对以前现有节点的引用
解决方案:您需要的是:
def addToHead(self, value):
tmp = LinkedNode(value)
tmp.nextNode = self.headNode
self.headNode = tmp
b<在其他编程语言中,code>toString
是将对象表示为字符串的一种流行方式,但python的方法是重写对象的\uu str\uuu()
和\uu repr\uu()
方法
解决方案(我坚持使用您的格式,尽管它可能需要一些更改;):
c。
toString
方法有几处错误(headNode
未打印,将失败headNode
为None
等),但我不会尝试修复它们,因为我们有上面的解决方案。我认为这也有问题。head甚至可能不存在,因此nextNode无论如何都将为空。是的,如果headNode为None,则表示您正在插入一个空列表,而head.nextNode应为None,因为插入后只有一个节点(即head),我认为这也存在问题。head甚至可能不存在,因此nextNode无论如何都将为空。是的,如果headNode为None,则意味着您正在插入一个空列表,head.nextNode应为None,因为插入后只有一个节点(即head)啊,我明白您所说的“pythonic”方式是什么意思了,我只想这样做print(repr(list))
或str
,如果我也选择使用它的话。做什么更好?人们会喜欢toString表示法以及同时使用pythonic表示法吗?通常建议不要有代码重复(既有\str\uu()
又有toString
)。此外,您甚至不必执行print(repr(list))
。一个简单的print(list)
将自动调用\u str\u()
方法:)啊,好的,知道这个很好!那么,我将坚持使用\uu str\uuu()
方法!啊,我明白你所说的“pythonic”做事方式是什么意思了,如果我也选择使用这种方式的话,我只会做print(repr(list))
或str
。做什么更好?人们对toString表示法以及同时使用pythonic表示法感到满意吗?通常建议不要有代码重复(同时使用\uu str\uuu()
和toString
)。另外,您甚至不必执行打印(repr(list))
。一个简单的print(list)
会自动调用\uu str\uuu()
方法:)啊,好吧,知道这个很好!那么,我将坚持使用\uu str\uuu()
方法!