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