/*
用两个栈实现队列:
要做到先进先出,stack2作为辅助栈:
把第一个栈中的元素按照先进后出顺序取出放入第二个栈中,再从第二个栈中弹出来,如此便做到了先进先出;
再将弹出完毕的stack2中剩余元素放回stack1;
**/
import java.util.Stack;
class QueneWithTwoStacks
{
public static Stack<Integer> stack1 = new Stack<Integer>();
public static Stack<Integer> stack2 = new Stack<Integer>();
public static void push(int node)
{
stack1.push(node);
}
public static int pop() {
//将stack1中元素移到stack2,元素顺序将随之反转
while (!stack1.empty())
{
stack2.push(stack1.pop());
}
//弹出stack2栈顶元素
int a=stack2.pop();
//将弹出元素后的stack2元素移回stack1
while (!stack2.empty())
{
stack1.push(stack2.pop());
}
return a;
}
//剑指offer思路
public static int pop2() {
if (stack2.empty())//stack2为空时将stack1中元素移到stack2,若stack2不为空则直接弹出stack2中的栈顶
{
//将stack1中元素移到stack2,元素顺序将随之反转
while (!stack1.empty())
{
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
public static void main(String[] args)
{
push(1);
push(2);
push(3);
System.out.println(pop2());
System.out.println(pop2());
push(4);
System.out.println(pop2());
push(5);
System.out.println(pop2());
System.out.println(pop2());
}
}
还没有评论,来说两句吧...