因此,对于不同语言的数据结构实践,我决定用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()
错误如下:
Traceback (most recent call last):
File "path/linkedList.py", line 52, in list.toString()
File "path/linkedList.py", line 44, in toString
while tmp.nextNode != None:
AttributeError: 'NoneType' object has no attribute 'nextNode' [Finished in 0.138s]
你的addToHead方法没有副作用。可能你是说
此外,toString将因空列表而崩溃。你知道吗
您正在执行
head = LinkedNode(value)
,希望LinkedList
的head
被覆盖。但实际上,您创建了一个名为head
的局部变量,并将其赋值为LinkedNode(value)
。因此,head
总是None
。显然你不能做None.nextNode
(因为它不是一个对象)。你知道吗解决方案:您实际需要的是
self.head = LinkedNode(value)
。self
是对您正在使用的对象的引用。你知道吗a.只需将
head
设置为新节点,就失去了对先前存在的节点的引用。你知道吗解决方案:您需要的是:
在其他编程语言中,
toString
是将对象表示为字符串的一种流行方式,但是pythonic的方法是重写对象的__str__()
和__repr__()
方法。你知道吗解决方案(我坚持使用您的格式,尽管它可能需要一些更改;):
c.
toString
方法有几个错误(headNode
没有打印,将失败headNode
是None
等),但我不会尝试修复它们,因为我们有上面的解决方案。你知道吗相关问题 更多 >
编程相关推荐