/** * By returnZhang * 用栈实现最小栈(获取栈中最小值) * 数据栈 stackData * 栈中最小数据 stackMin */
public class MinStack { private Stack<Integer> stackData;//数据栈 private Stack<Integer> stackMin;//保存当前最小数的栈(称最小栈 //构造函数 public MinStack(){ stackData=new Stack<>(); stackMin=new Stack<>(); } //压人函数 public void push(Integer num){ //压入时判断最小栈是否为空或者要压入的数是否比最小栈栈顶数还小,时则压入数据站的同时压入最小栈 if(stackMin.isEmpty()||getMin()>num){ stackMin.push(num); } stackData.push(num); } //弹出函数 public Integer pop(){ Integer num=stackData.pop(); if(stackMin.peek() == num){ stackMin.pop(); } return num; } //获取栈中最小数 public Integer getMin(){ return stackMin.peek(); } }
ps:感谢左程云老师的 程序员代码面试指南