【发布时间】:2015-02-03 23:16:54
【问题描述】:
您好,我正在尝试通过执行第一个任务来学习 Python,即使用 Python 实现链接列表。我已经实现了所有其他功能。但是删除功能在尝试删除不存在的项目时给了我错误。谁能帮我?非常感谢。
我定义的删除函数:
def delete(self,item):
current = self.head
previous = None
found = False
while not found:
if current.get_data() == item:
found = True
else:
previous = current
current = current.get_next()
if previous == None:
self.head = current.get_next()
else:
previous.set_next(current.get_next())
然后我写了下面的代码来测试:
my_list = LinkedList()
my_list.add(31)
my_list.add(77)
my_list.add(17)
my_list.add(93)
my_list.add(26)
my_list.add(54)
assert my_list.size() == 6
my_list.delete(77)
my_list.delete(1)
assert my_list.size() == 5
print(my_list.__str__())
AttributeError: 'NoneType' 对象没有属性 'get_data'
get_data() 是在 Node 类中定义的,我不知道为什么在尝试删除不存在的项目时,当前的局部变量变成了 NoneType 而不是 Node。谁能帮我?谢谢!
【问题讨论】:
-
self.head或者一个变量是一个函数? -
你正在到达列表的末尾,
current.get_next()正在返回None并且下次循环调用get_data()时(通过从空列表)。current is None时需要退出 while 循环,忘记found。
标签: python linked-list