题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
队列:先进先出
栈:先进后出
思路:
1.stack1负责入队,stack2负责出队
2.如果stack1和stack2都为空,则抛出异常
3.如果stack2为空,则把satck1的元素都pop掉,并且push到stack2
4.此时stack2不为空,直接出队,返回pop值
代码:
public class Solution {
//stack1实现入队
Stack<Integer> stack1 = new Stack<Integer>();
//stack2实现出队
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.add(node); //直接入队
}
public int pop() {
//1.如果stack1和stack2都为空,则抛出异常
if(stack1.empty() && stack2.empty()){
throw new RuntimeException("Queue is empty");
}
//2.如果stack2为空,则把satck1的元素都pop掉,并且push到stack2
if(stack2.empty()) {
while (!(stack1.empty())) {
stack2.push(stack1.pop());
}
}
//3.此时stack2不为空,直接出队,返回pop值
return stack2.pop();
}
}