Question
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
- push(x) – Push element x onto stack.
- pop() – Removes the element on top of the stack.
- top() – Get the top element.
- getMin() – Retrieve the minimum element in the stack.
Note
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.getMin();
Java Code
public class MinStack {
/** initialize your data structure here. */
class Node {
int val;
Node next;
Node(int x, Node n) {
val = x;
next = n;
}
}
/**
* 实现方式:
* 同时维护两个链表,一个用于存储栈内的数据,一个用于储存当前栈内的最小值,
* 且两者的push和pop操作保持同步
*/
Node head = null;
Node minhead = new Node(Integer.MAX_VALUE, null);
public MinStack() {
}
public void push(int x) {
head = new Node(x, head);
if(x < minhead.val)
minhead = new Node(x, minhead);
else
minhead = new Node(minhead.val, minhead);
}
public void pop() {
head = head.next;
minhead = minhead.next;
}
public int top() {
return head.val;
}
public int getMin() {
return minhead.val;
}
}