package com.interview.algorithms.stackqueue; import com.interview.basics.model.collection.stack.LinkedStack; import com.interview.basics.model.collection.stack.Stack; /** * Created with IntelliJ IDEA. * User: stefanie * Date: 7/14/14 * Time: 11:47 AM * * Design a stack. We want to push, pop, and also, retrieve the minimum element in constant time. */ public class C7_1_MinStack_2Stack<T extends Comparable> implements Stack<T> { private Stack<T> stack = new LinkedStack<T>(); private Stack<T> minStack = new LinkedStack<>(); @Override public void push(T item) { stack.push(item); if(min() == null || item.compareTo(min()) <= 0) minStack.push(item); } @Override public T pop() { T element = stack.pop(); if(element!= null && min() != null && element.compareTo(min()) == 0) minStack.pop(); return element; } @Override public T peek() { return stack.peek(); } @Override public boolean isEmpty() { return stack.isEmpty(); } @Override public int size() { return stack.size(); } @Override public T get(int i) { return null; } public T min(){ return minStack.peek(); } }