题目
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.min(); --> 返回 -2.
提示:各函数的调用总次数不超过 20000 次
题解
建立一个单链表,通过head来实现对栈的控制,结点增加一个min用来保存以该结点为头结点的链表中的最小值。
class MinStack {private Node head;/** initialize your data structure here. */public MinStack() {}public void push(int x) {if(head == null)head = new Node(x, x, null);elsehead = new Node(x, Math.min(x, head.min), head);}public void pop() {head = head.next;}public int top() {return head.val;}public int min() {return head.min;}private class Node{int val;int min;Node next;public Node(int val, int min, Node next){this.val = val;this.min = min;this.next = next;}}
}/*** Your MinStack object will be instantiated and called as such:* MinStack obj = new MinStack();* obj.push(x);* obj.pop();* int param_3 = obj.top();* int param_4 = obj.min();*/