题目:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
思路:维护两个栈,一个每次添加的所有的数,另一个添加每次最小值(当前值比栈顶小则添加,都否添加当前栈顶),pop时两个栈都要出
Stack<Integer> mData=new Stack<Integer>(); Stack<Integer> mMin=new Stack<Integer>(); //java中的peek()和c++中的top()只返回头,不移除,pop要移除 public void push(int node) { if(mData.empty()){ mMin.push(node); } if(node<mMin.peek()){ mMin.push(node); }else{ mMin.push(mMin.peek()); } mData.push(node); } public void pop() { if(mData.size()>0&&mMin.size()>0){ mData.pop(); mMin.pop(); } } public int top() { return (int)mData.peek(); } public int min() { if(mMin.empty()){ return 0; } return (int)mMin.peek(); }