【发布时间】:2017-01-15 09:33:48
【问题描述】:
我在python中实现了链表,它完美地添加了元素并打印了列表。 但我对删除方法有问题。我想从列表中删除最后一项
这是我的班级 Cell():
class Cell():
def __init__(self, value = None, next = None):
self.value = value
self.next = next
这是我的类 LinkedList():
class LinkedList():
def __init__(self):
self.top = None
self.last = None
self.length = 0
添加新单元的方法效果很好:
def add (self, value, position = None):
newCell = Cell(value, None)
self.length += 1
if position is None or position >= self.length:
if self.top == None:
self.last = self.top = Cell(value, None)
else:
self.last.next = self.last = Cell(value, None)
elif position == 1:
self.top = Cell (value, self.top)
elif position > 1:
afterMe = self.top
i = 1
for i in range(position-2):
afterMe = afterMe.next
newCell.next = afterMe.next
afterMe.next = newCell
toString() 方法也很好用:
def __str__(self):
linkedList = ''
cell = self.top
if self.top is None:
return 'Linked list is empty'
for i in range(self.length):
if cell == self.last:
linkedList += (str(cell.value))
else:
linkedList += (str(cell.value)+ ', ')
cell = cell.next
return linkedList
这是我的删除方法,它会产生错误:
def delete(self, value = None): # want to delete last cell
if self.top == None:
return None
current = self.top
if value is None:
self.length -= 1
while (current.next != self.last):
current = current.next
self.last = current
current.next = None
else:
while (current.next.value != value):
current = current.next
if current == self.last:
print ('no such value')
return
current.next = current.next.next
以下是代码的工作原理和错误:
numbers = LinkedList()
numbers.add(55)
numbers.add(75)
numbers.add(65)
print(numbers) # 55, 75, 65
numbers.add(3,2)
numbers.add (40,3)
print(numbers) # 55, 3, 40, 75, 65
numbers.delete()
print(numbers) # 55, 3, 40, 75
numbers.delete(40)
print(numbers)
''' returns error:
Traceback (most recent call last):
File "C:/Users/demin.va/Documents/Dropbox/Programming/Алгоритмы/связные списки.py", line 105, in <module>
print(numbers)
File "C:/Users/demin.va/Documents/Dropbox/Programming/Алгоритмы/связные списки.py", line 72, in __str__
linkedList += (str(cell.value)+ ', ')
AttributeError: 'NoneType' object has no attribute 'value'
'''
请回答,我应该如何更改代码以正确删除最后一个单元格或从不同位置删除?
【问题讨论】:
标签: python python-3.x data-structures linked-list