剑指Offer(栈和队列)-用两个栈实现队列
(用两个栈实现队列)题目描述:
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
对于栈的数据结构,元素在里面是先进后出的,比如输入数据{a,b,c},这样的一行数据希望利用两个栈来实现,以最终队列的形式,那么就得先进先出,而在栈中,最先输入进去的a是在栈底的位置的,所以要让队列实现里面有pop操作那么就得让a先出来,所以在此之前先对栈一进行压栈操作,由于a在最底层,所以需要将b,c都弹出来,弹出来的数据压栈到stack2里面,这样子在stack2中就是{c,b},此时队列pop出来了a元素,现在需要得到本来先进去的b,然后c,所以直接将Stack2的元素pop出来就行了。结论可以总结为:
(1)当插入时,直接插入 stack1。
(2)当弹出时,当 stack2 不为空,弹出 stack2 栈顶元素,如果 stack2 为空,将 stack1 中的全部数逐个出栈入栈 stack2,再弹出 stack2 栈顶元素。
实现:push操作就将所有的元素都先压进stack1里面,pop操作就是先判断stack2里面是否存在有元素,如有先弹出,没有的话就一直将stack1里面的元素全部弹出来再压进stack2。
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.size()<=0){ while(stack1.size()!=0){ stack2.push(stack1.pop()); } } return stack2.pop(); } }