📅  最后修改于: 2023-12-03 15:28:45.066000             🧑  作者: Mango
本问题要求实现一个基于链表的栈。栈是一种常用的数据结构,支持元素的入栈和出栈操作。栈遵循后进先出(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$ 是栈的元素个数。