我正在尝试从堆栈中弹出一个项目(使用链接列表与数组相对)。我首先创建了一个LinkedList类,其中包含3个节点,值为[1,2,3]。所以我想弹出最后一个节点(node_C,value = 3),因此我希望看到值[1,2]。相反没有打印出来。
class LinkedList:
def __init__(self, value):
self.value = value
self.next = None
node_A = LinkedList(1)
node_B = LinkedList(2)
node_C = LinkedList(3)
node_A.next = node_B
node_B.next = node_C
def pop(head):
current_node = head
while current_node.next:
if current_node.next == None:
break
else:
current_node = current_node.next
del current_node
return node_A.value, node_B.value, node_C.value
try:
print(pop(node_A))
except NameError:
pass
如何重写这个以达到我想要的效果(即显示值1,2 ..并且弹出3)?
答案 0 :(得分:1)
我想我已经发现了你的逻辑问题,所以基于提供的代码,似乎pop函数不返回任何东西,可能只是格式化或其他东西。
但是这里是你的代码的正确版本,我只是删除pop
方法中的最后一个节点,然后调用另一个名为listValues
的方法,它返回给我的节点值。 pop后的链接列表
请查看以下实现以获得更清晰的视图。
class LinkedList:
def __init__(self, value):
self.value = value
self.next = None
node_A = LinkedList(1)
node_B = LinkedList(2)
node_C = LinkedList(3)
node_A.next = node_B
node_B.next = node_C
def pop(head):
current_node = head
while current_node.next:
if current_node.next == None:
del current_node
break
else:
current_node = current_node.next
def listValues(head):
values = []
current_node = head
while current_node.next:
values.append(current_node.value)
current_node = current_node.next
return values
try:
pop(node_A)
print(listValues(node_A))
except NameError:
pass
希望这有帮助!
答案 1 :(得分:1)
del current node
和return node_A.value, node_B.value, node_C.value
命令应该属于pop函数,因此它们应该是有意的。但无论如何del current node
对我不起作用。相反,您可以编写current_node.value = None
,但之后仍然会返回所有3个节点值,因此结果为1,2,None
。
我宁愿在类中编写 pop 函数,也可以在类中添加另一个 printlist 函数。 pop 函数只删除列表中的最后一个元素(将下一个属性更改为列表中第二个最后一个元素的None
)并且不打印或返回任何内容。 printlist 函数遍历列表并打印出所有元素(同时有下一个元素)。这是我的代码:
class LinkedList:
def __init__(self, value):
self.value = value
self.next = None
def pop(self):
current_node = self
while current_node.next:
if current_node.next.next == None:
current_node.next = None
else:
current_node = current_node.next
def printlist(self):
current_node = self
lst = [current_node.value]
while current_node.next:
current_node = current_node.next
lst.append(current_node.value)
print lst
node_A = LinkedList(1)
node_B = LinkedList(2)
node_C = LinkedList(3)
node_A.next = node_B
node_B.next = node_C
try:
node_A.pop()
node_A.printlist()
except NameError:
pass
如果我运行它,结果是[1,2]。如果我删除node_A.pop()
我得到[1,2,3]。如果我写另一个node_A.pop()
,那么结果是[1]