双栈队列
题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
}
public int pop() {
}
}
首先我们先得知道栈和队列的特点
栈:先进后出
队列:先进先出
题目要求我们用两个栈来模拟队列,我们可以专门用stack1来存储元素,stack2用来弹出元素,当要弹出元素的时候判断stack2是否为空,如果是则将stack1中的元素全部pop到stack2中,再弹出stack2中栈顶的元素,如果stack2不为空直接弹出stack2中栈顶元素。
如图
push 1 2 3
当要执行pop操作的时候, 此时stack2栈为空,按照我刚刚写的思路,stack2为空,就将stack1中的所有元素pop到stack2中,再pop stack2
push 4 5
pop 一次
push 6
此时执行pop操作,因为stack2不为空,所以stack2直接pop
再pop
代码:
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
if(stack2.isEmpty())
{
while(!stack1.isEmpty())
{
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}