通过两个栈,实现添加数据后,取出最小值
public class MyStack1 {
private Stack<Integer> stackData;
private Stack<Integer> stackMin;
public MyStack1(){
this.stackData = new Stack<Integer>();
this.stackMin = new Stack<Integer>();
}
public void pushStack(int newNum){
if (stackMin.isEmpty()){
stackMin.push(newNum);
}else if (newNum <= stackMin.peek()){
stackMin.push(newNum);
}
stackData.push(newNum);
}
public Integer popStack(){
if (stackMin.isEmpty()){
throw new RuntimeException("yun");
}
Integer value = stackData.pop();
if (value == stackMin.peek()){
return value;
}
return 0;
}
public Integer getMinNum(){
return stackMin.peek();
}
}
两个栈实现一个队列
public class TwoStackQueue {
private Stack<Integer> stackPush;
private Stack<Integer> stackPop;
public TwoStackQueue(){
this.stackPush = new Stack<Integer>();
this.stackPop = new Stack<Integer>();
}
private void pushtoPop(){
if (stackPop.isEmpty()){
while (!stackPush.isEmpty()){
stackPop.push(stackPush.pop());
}
}
}
public void add(int newNum){
stackPush.push(newNum);
pushtoPop();
}
public Integer poll(){
pushtoPop();
return stackPop.pop();
}
public int peek(){
pushtoPop();
return stackPop.peek();
}
}