题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路
因为栈只能在同一端push与pop,所以一个栈用于入队,一个栈用于出队
栈1的入栈顺序为入队顺序,而入队顺序与出队顺序是一样的,所以讲栈1的所有元素出栈压入栈2,栈2的出栈顺序即为出队顺序
故操作为:
出队:将栈2元素逐个出栈压入栈1,则栈1的栈顶元素就是队头
入队:将栈1元素逐个入栈压入栈2,则栈2的栈顶元素就是队尾
代码
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
if(stack1.isEmpty()) {
swap(stack2,stack1);
}
stack1.push(node);
}
public int pop() {
if(stack2.isEmpty()) {
swap(stack1,stack2);
}
return stack2.pop();
}
//将栈a的元素逐个出栈并压入栈b,并清空栈a
public void swap(Stack a,Stack b){
while(!a.isEmpty()){
b.push(a.pop());
}
a.clear();
}
}
其他解决方法
这里是push函数中交换一次栈,pop函数中交换一次栈
也可以是pop函数中直接交换两次,push函数不交换