【问题标题】:Trying to remove last element in a list using a Node class and a Linked List class尝试使用 Node 类和 Linked List 类删除列表中的最后一个元素
【发布时间】:2017-01-31 01:13:20
【问题描述】:

对于此代码,我正在尝试使用 Node 类和 LinkedList 类删除列表的最后一个添加对象。我在这里有这段代码,但由于某种原因它不起作用。我认为这是因为如果列表为空,代码将不起作用,但我不确定如何解决。

class Node:
    def __init__(self, init_data):
        self.data = init_data
        self.next = None

    def get_data(self):
        return self.data

    def get_next(self):
        return self.next

    def set_data(self, new_data):
        self.data = new_data

    def set_next(self, new_next):
        self.next = new_next

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
        previous = current
        while current.get_next() != None:
            previous = current
            current = current.get_next()
        previous.set_next(None)
        return current.get_data()

当尝试使用上面的代码运行以下行时,

my_list = LinkedList()

my_list.add('dog')
my_list.add('cat')
my_list.add('bit')
my_list.add('ask')

print(my_list.remove_from_tail())
print(my_list.remove_from_tail())

my_list.print_all()

我得到以下输出:

<__main__.Node object at 0x00000000033A19E8>
<__main__.Node object at 0x00000000033A1A58>
ask
bit

我应该得到什么时候:

dog
cat
ask
bit

感谢任何帮助我了解我做错了什么。

编辑:我只是想更改我的 LinkedList 类的 remove_from_list 方法。其他部分无需更改。

编辑:更改了我的列表,以便我返回当前内部的数据。现在,当我尝试测试以下代码时:

my_list = LinkedList()

my_list.add(400)
print(my_list.remove_from_tail())
my_list.add(300)
print(my_list.remove_from_tail())
my_list.add(200)
print(my_list.remove_from_tail())
my_list.add(100)


print('List')
my_list.print_all()

我得到了输出:

400
400
300
List
100
200

我应该什么时候得到

400
300
200
List
100

编辑:我现在遇到的问题是我需要查看列表中是否只有一个元素需要创建,以便 current.head = None。如何检查列表中是否只有一个元素。

【问题讨论】:

    标签: python python-3.x class linked-list


    【解决方案1】:

    remove_from_tail() 返回一个列表项而不是数据;所以,你的打印应该如下

    print(my_list.remove_from_tail().get_data())
    

    【讨论】:

    • 我的错误。这确实打印狗猫问位。但是我试图只更改 LinkedList 类,以便它可以删除列表中的最后一个元素。
    猜你喜欢
    • 2023-03-27
    • 2012-01-11
    • 2018-03-10
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    相关资源
    最近更新 更多