我是Python的新手,在实现从链表中删除最后一个节点的函数时遇到问题。这是我到目前为止的代码(我正在一个名为Coderunner的在线平台上编码,该平台已经为我实现了一些背景代码,例如Node类):
class LinkedList:
def __init__(self):
self.head = None
def print_all(self):
current = self.head
while current != None:
print(current.get_data())
current = current.get_next()
def add(self, item):
new_node = Node(item)
new_node.set_next(self.head)
self.head = new_node
def remove_from_tail(self):
current = self.head
prev = current
while current != None:
current = current.get_next()
prev.set_next(current.get_next())
return current
运行以下代码时:
my_list = LinkedList()
my_list.add('Car')
my_list.add('Bike')
my_list.add('Truck')
result = my_list.remove_from_tail()
print('Removed:', result)
my_list.print_all()
我得到:
Removed: <__main__.Node object at 0x1063650>
Bike
Truck
谁能指出我哪里出错了?似乎打印了节点对象,但没有打印节点内的值。提前感谢您的帮助!
方法remove_from_trail返回的值是 Node 类型。当您打印它时,您正在打印该节点对象。您需要访问节点内部的值,您可以使用:
dir(result)
以查看对象具有哪些方法和属性,然后调用要查找的属性。
看起来这段代码将从列表中删除所有节点。尝试类似操作:
def remove_from_tail(self):
current = self.head
prev = current
while current.get_next() != None: #the last element will have next == None
prev = current
current = current.get_next()
# At this point, current will be pointing to the last element in the list
prev.set_next(None)
return current