尝试使用Node类和Linked List类删除列表中的最后一个元素

时间:2017-01-31 01:13:21

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

对于此代码,我尝试使用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。如何检查列表中是否只有一个元素。

1 个答案:

答案 0 :(得分:2)

Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection) at PX.Data.PXCache.AlteredDescriptor..ctor(PXEventSubscriberAttribute[] attributes, HashSet`1 fields, _CacheAttachedDelegate method, Type cacheType) at PX.Data.PXGraph.b(Type A_0) at PX.Data.PXGraph.CreateInstance(Type graphType, String prefix) at PX.Data.PXGraph.CreateInstance(Type graphType) at PX.Data.PXGraph.CreateInstance[Graph]() at System.Lazy`1.CreateValue() at System.Lazy`1.LazyInitValue() at PX.Objects.AR.ARSalesPriceMaint.get_SingleARSalesPriceMaint() at PX.Objects.AR.ARSalesPriceMaint.CalculateSalesPrice(PXCache sender, String custPriceClass, Nullable`1 customerID, Nullable`1 inventoryID, CurrencyInfo currencyinfo, String UOM, Nullable`1 quantity, DateTime date, Nullable`1 currentUnitPrice) 返回列表项而不是数据;所以,你的印刷品应该如下

remove_from_tail()