题目描述:
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解题思路:
栈操作的特点是“先进后出”,队列的特点是“先进先出”。现在要用栈来模仿队列的操作。此题借助两个栈(stack1、stack2)来实现队列的入队和出队操作。
(1)入队: 假设元素入栈的时候,默认到stack1,则不对stack2进行操作。
(2)出队:需要借助stack2进行中转,首先判断栈stack2是否为空,如果为空,则先把stack1中的所有元素倒入stack2,然后stack2进行一次出栈操作,然后再把stack2中的所有元素倒入stack1,即完成一次出队操作;若stack2不为空,则直接进行出栈(即出队)操作。
实现代码:
public class 两个栈实现队列 {
static Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
int val = 0;
if(!stack2.isEmpty()) {
val = stack2.pop();
}else {
while(!stack1.isEmpty()) {
stack2.push(stack1.pop());
}
val = stack2.pop();
}
return val;
}
public static void main(String[] args) {
stack1.push(1);
stack1.push(2);
stack1.push(3);
System.out.println(stack1.pop());
}
}