在 Python 中使用链表实现堆栈

Posted

技术标签:

【中文标题】在 Python 中使用链表实现堆栈【英文标题】:Implement a Stack Using Linked List in Python 【发布时间】:2021-11-16 12:43:28 【问题描述】:

我正在尝试使用链接列表实现堆栈,但每当我尝试使用任何功能时,它都会返回一个额外的None。我不知道为什么会这样。在每次操作之后,我想要的输出不应包含关键字None。谁能告诉我这里出了什么问题?

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


class Stack:
    def __init__(self):
        self.__head = None
        self.__count = 0


    def push(self, ele):
        newNode = Node(ele)
        newNode.next = self.__head
        self.__head = newNode
        self.__count = self.__count + 1
    

    def pop(self):
        if self.isEmpty() is  True:
            print("Hey! The stack is Empty")
            return
        else:
            pop = self.__head.data
            self.__head = self.__head.next
            self.__count = self.__count - 1
            return pop
        
    

    def top(self):
        if self.isEmpty() is  True:
            print("Hey! The stack is Empty")
            return
        else:
            pop = self.__head.data
            print(pop)
    

    def size(self):
        return self.__count

    def isEmpty(self):
        return self.__count == 0

s = Stack()
s.push(15)
print(s.top())
s.push(16)
print(s.pop())
print(s.top())

输出

15

16

16

15

【问题讨论】:

这是因为s.top() 没有返回任何东西。您正在打印它返回的内容,即无。一般来说,最好让函数只返回一个值,让调用者决定如何处理它,比如打印它。也就是说,从您的函数中删除打印语句。 (在这种情况下,将那些打印语句更改为返回语句) 【参考方案1】:

由于您只打印最高值,None 始终由您的 top 函数返回。将其更改为 return 顶部值而不是打印它:

    def top(self):
        if self.isEmpty() is  True:
            print("Hey! The stack is Empty")
            return
        else:
            return self.__head.data

【讨论】:

以上是关于在 Python 中使用链表实现堆栈的主要内容,如果未能解决你的问题,请参考以下文章

使用向量类实现堆栈的链表与动态数组

如何从链表中反转堆栈?

数据结构-堆栈和队列最简单的实现(Python实现)

golang Golang使用链表实现基本堆栈的示例

用于实现堆栈的链表与动态数组

使用链表堆栈的中缀到后缀转换器