class MinStack {
class Node {
int val;
int minVal;
Node(int v, int mv) {
this.val = v;
this.minVal = mv;
}
}
Deque<Node> stack = new ArrayDeque<>();
public MinStack() {
}
public void push(int val) {
if (stack.isEmpty()) {
stack.push(new Node(val, val));
} else {
int minVal = stack.peek().minVal;
stack.push(new Node(val, Math.min(minVal, val)));
}
}
public void pop() {
stack.pop();
}
public int top() {
return stack.peek().val;
}
public int getMin() {
return stack.peek().minVal;
}
}
/**
* Your MinStack object will be instantiated and called as such:
* MinStack obj = new MinStack();
* obj.push(val);
* obj.pop();
* int param_3 = obj.top();
* int param_4 = obj.getMin();
*/