题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
思路
把每次的最小元素(之前的最小元素和新压入战的元素两者的较小值)都保存起来放到另外一个辅助栈里。
如果每次都把最小元素压入辅助栈, 那么就能保证辅助栈的栈顶一直都是最小元素.当最小元素从数据栈内被弹出之后,同时弹出辅助栈的栈顶元素,此时辅助栈的新栈顶元素就是下一个最小值。
Stack<Integer> dataStack = new Stack<Integer>(); // 数据栈 Stack<Integer> minStack = new Stack<Integer>(); // 辅助栈 public void push(int node) { dataStack.push(node); if(minStack.isEmpty() || minStack.peek() > node ) { minStack.push(node); } else { minStack.push(minStack.peek()); } } public void pop() { if(!dataStack.isEmpty() && !minStack.isEmpty()) { dataStack.pop(); minStack.pop(); } } public int min() { int min = 0; if(!dataStack.isEmpty() && !minStack.isEmpty()) { min = minStack.peek(); } return min; }