堆栈弹出使用链表 - Python

时间:2017-09-27 12:57:41

标签: python-3.x data-structures linked-list stack

我正在尝试从堆栈中弹出一个项目(使用链接列表与数组相对)。我首先创建了一个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)?

2 个答案:

答案 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 nodereturn 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]