因此,对于不同语言的数据结构实践,我决定在python中创建一个链接列表。
现在这是我的代码到目前为止,它还远未完成,但我遇到了这个错误,我似乎无法向自己指出它来自哪里:
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()
这是错误:
追踪(最近一次呼叫最后一次):
文件"路径/ linkedList.py",第52行,in list.toString()
文件"路径/ linkedList.py",第44行,在toString中
while tmp.nextNode != None:
AttributeError:' NoneType'对象没有属性' nextNode' [以0.138秒完成]
答案 0 :(得分:1)
您正在head = LinkedNode(value)
,希望覆盖LinkedList
' head
。但相反,您会创建一个名为head
的局部变量,并为其赋值LinkedNode(value)
。因此,head
始终为None
。你显然不能None.nextNode
(因为它不是一个对象)。
解决方案:您实际需要的是self.head = LinkedNode(value)
。 self
是对您正在使用的对象的引用。
一个。只需将head
设置为新节点,就会丢失对先前存在的节点的引用。
解决方案:您需要的是:
def addToHead(self, value):
tmp = LinkedNode(value)
tmp.nextNode = self.headNode
self.headNode = tmp
湾在其他编程语言中,toString
是一种将对象表示为字符串的流行方式,但 pythonic 的方法是覆盖__str__()
和__repr__()
方法对象。
解决方案(我已经坚持使用您的格式,虽然它可以使用一些更改;):
def __repr__(self):
tmp = self.headNode
buffer = []
while tmp is not None:
buffer.append(tmp.value)
tmp = tmp.nextNode
return "[" + ", ".join(map(str, buffer)) + "]"
℃。 toString
方法存在一些问题(headNode
未打印,headNode
未成为None
等等,但我不会尝试并修复它们,因为我们有上述解决方案。