📜  门| GATE-CS-2016(套装2)|问题 17(1)

📅  最后修改于: 2023-12-03 15:28:45.066000             🧑  作者: Mango

问题 17

本问题要求实现一个基于链表的栈。栈是一种常用的数据结构,支持元素的入栈和出栈操作。栈遵循后进先出(LIFO)的原则。具体来说,入栈操作就是向栈中添加一个元素,而出栈操作则是从栈中删除一个元素。实现过程中请使用链表作为底层数据结构。

实现思路

栈的实现基于链表,因此需要维护链表头指针。在入栈操作时,我们向链表头插入一个新节点。在出栈操作时,我们从链表头删除一个节点。

使用 Python 语言实现栈的伪代码如下:

class ListNode:
    def __init__(self, val: int, next: ListNode):
        self.val = val
        self.next = next

class Stack:
    def __init__(self):
        self.head = None

    def push(self, val: int):
        node = ListNode(val, self.head)
        self.head = node

    def pop(self) -> int:
        if self.head:
            val = self.head.val
            self.head = self.head.next
            return val
        else:
            return None
时间复杂度和空间复杂度

入栈操作和出栈操作都需要常数时间 $O(1)$。因此,本题的时间复杂度为 $O(n)$,其中 $n$ 表示栈的元素个数。

在空间上,我们需要维护一个链表。因此,空间复杂度为 $O(n)$,其中 $n$ 是栈的元素个数。