【LintCode】用栈实现队列

来源:互联网 发布:外汇模拟软件app 编辑:程序博客网 时间:2024/06/05 18:57

描述

正如标题所述,你需要使用两个栈来实现队列的一些操作。

队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。

pop和top方法都应该返回第一个元素的值。

样例

比如push(1), pop(), push(2), push(3), top(), pop(),你应该返回1,2和2

思路

    s1是入栈的,s2是出栈的。

  • 入队列:直接压入s1即可
  • 出队列:如果s2不为空,把s2中的栈顶元素直接弹出;否则,把s1的所有元素全部弹出压入s2中,再弹出s2的栈顶元素

代码

<span style="font-size:18px;">public class Queue {    private Stack<Integer> stack1;    private Stack<Integer> stack2;    public Queue() {       // do initialization if necessary       stack1=new Stack<Integer>();       stack2=new Stack<Integer>();    }        public void push(int element) {        // write your code here        stack1.push(element);    }    public int pop() {        // write your code here       if(stack2.empty())       while(!stack1.empty()){           int s1=stack1.pop();           stack2.push(s1);       }               return stack2.pop();    }    public int top() {        // write your code here     if(stack2.empty())     while(!stack1.empty()){       int s1=stack1.pop();       stack2.push(s1);     }     int s2=stack2.peek();//这里只是返回第一个元素的值,并没有弹出第一个元素     //Java中返回堆栈顶的值用peek ,C++用top         return s2;            }}</span>


0 0
原创粉丝点击