栈的特点是后进先出,队列的特点是先进先出。两个栈将底部拼接到一起就能实现队列的效果。
题目:
解题思路:
将一个栈当做输入栈,用于压入push传入的数据;另一个栈当作输出栈,用于pop和peek操作。每次pop或peek时若输出栈为空则将输入栈的全部数据依次弹出并压入输出栈,这样输出栈从栈顶往栈底的顺序就是队列从首部到尾部的顺序
代码实现:
public class MyQueue {
Deque<Integer> inStack;
Deque<Integer> outStack;
public MyQueue(){
inStack = new LinkedList<>();
outStack = new LinkedList<>();
}
public void push(int val){
inStack.push(val);
}
public int pop(){
if (outStack.isEmpty()){
intoOutStack();
}
return outStack.pop();
}
public int peek(){
if (outStack.isEmpty()){
intoOutStack();
}
return outStack.peek();
}
public boolean isEmpty(){
return inStack.isEmpty()&&outStack.isEmpty();
}
private void intoOutStack(){
while (!inStack.isEmpty()){
outStack.push(inStack.pop());
}
}
}