Python中链表的最小栈(Min Stack)实现方法
链表最小栈是一种可以快速获取栈中最小值的数据结构,其实现方式如下:
- 定义一个链表节点类,包含当前值、当前节点为止的最小值以及指向下一节点的指针。
- 定义一个最小栈类,包含一个头节点、一个计数器以及栈的基本操作方法(压栈、出栈、获取栈顶元素、获取最小值)。
- 在压栈时,将当前值与前一个节点的最小值比较,取较小值作为当前节点的最小值。
- 在出栈时,返回当前节点的值,并将指针移到下一节点。
- 获取栈顶元素时,返回当前指针所指节点的值。
- 获取最小值时,返回头节点的最小值属性。
以下是Python语言的代码演示:
class ListNode: def __init__(self, val, min_val=None): self.val = val self.min_val = min_val def __str__(self): return str(self.val) class MinStack: def __init__(self): self.head = None self.length = 0 def push(self, x): if self.head is None: self.head = ListNode(x, x) else: cur_min = min(x, self.head.min_val) new_node = ListNode(x, cur_min) new_node.next = self.head self.head = new_node self.length += 1 def pop(self): if self.head is not None: del_node = self.head self.head = del_node.next self.length -= 1 return del_node.val def top(self): if self.head is not None: return self.head.val def get_min(self): if self.head is not None: return self.head.min_val # 测试代码 s = MinStack() s.push(3) s.push(2) s.push(4) s.push(1) print(s.top()) # 输出 1 print(s.get_min()) # 输出 1 s.pop() s.pop() print(s.top()) # 输出 2 print(s.get_min()) # 输出 2
相关文章