MinStack.java
import java.util.ArrayDeque;
import java.util.Deque;
public class MinStack<T extends Comparable<T>> {
private Deque<CustomElem<T>> mDeque = new ArrayDeque<>();
private T mMinElem = null;
public void push(T t) {
CustomElem<T> elem = new CustomElem<>();
elem.mValue = t;
if (mMinElem == null) {
mMinElem = t;
}
if (mMinElem.compareTo(t) <= 0) {
elem.minElem = mMinElem;
} else {
elem.minElem = t;
mMinElem = t;
}
mDeque.push(elem);
}
public T min(){
CustomElem<T> elem = mDeque.getFirst();
return elem.minElem;
}
public void pop(){
mDeque.removeFirst();
}
class CustomElem<T> {
T mValue;
T minElem;
}
}
MinStackTest.java
public class MinStackTest {
public static void main(String[] args) {
MinStack<Integer> myStack = new MinStack<>();
myStack.push(4);
myStack.push(3);
myStack.push(5);
myStack.push(1);
System.out.println(myStack.min());
myStack.pop();
System.out.println(myStack.min());
}
}