美文网首页技术干货
LeetCode 232题用栈实现队列(Implement Qu

LeetCode 232题用栈实现队列(Implement Qu

作者: 随机的未知 | 来源:发表于2020-02-01 07:53 被阅读0次

    题目链接

    https://leetcode-cn.com/problems/implement-queue-using-stacks/

    题目描述

    使用栈实现队列的下列操作:

    push(x) -- 将一个元素放入队列的尾部。
    pop() -- 从队列首部移除元素。
    peek() -- 返回队列首部的元素。
    empty() -- 返回队列是否为空。
    

    示例:

    MyQueue queue = new MyQueue();
    queue.push(1);
    queue.push(2);
    queue.peek(); // 返回 1
    queue.pop(); // 返回 1
    queue.empty(); // 返回 false

    思路

    使用两个栈来完成操作,首先全部进入第一个栈,再全部进入第二个栈,用图来演示一下:
    首先进入栈1;

    入栈1

    然后出栈1,入栈2;


    出栈1入栈2

    再出栈2。


    出栈2

    由图可以知道,用两个栈即可完成队列的操作;

    分为下面三种情况

    1. Stack_1空,Stack_2有元素,这时push()操作让Stack_1进行push();pop()操作,只需让Stack_2进行pop();peek()操作,也只需让Stack_2进行peek()就可以了;这时队列不为空;
    2. Stack_1不空,Stack_2空,这时push()操作让Stack_1进行push();pop()操作需要将Stack_1的所有元素进入Stack_2,Stack_2进行pop();peek()操作,也只需要将Stack_1的所有元素进入Stack_2,再让Stack_2进行peek()就可以了;这是队列不为空;
    3. Stack_1空,Stack_2也为空,push()操作让Stack_1进行push()即可,pop()和push()无法完成,队为空。

    代码

    import java.util.Stack;
    
    class MyQueue {
    
        //初始化栈1和栈2
        private Stack<Integer> Stack_1;
        private Stack<Integer> Stack_2;
        /** Initialize your data structure here. */
        public MyQueue() {
            Stack_1 = new Stack<>();
            Stack_2 = new Stack<>();
        }
        //进入第一个栈
        /** Push element x to the back of queue. */
        public void push(int x) {
            Stack_1.push(x);
        }
        
    
        /** Removes the element from in front of queue and returns that element. */
        public int pop() {
            //如果栈2是空的
            if(Stack_2.isEmpty()){
                //将栈1的所有元素入栈2
                while(!Stack_1.isEmpty()){
                    Stack_2.push(Stack_1.pop());
                }
            }
            if (!Stack_2.isEmpty()) {
                return Stack_2.pop();
            }
            throw new RuntimeException("MyQueue空了!");
        }
    
        /** Get the front element. */
        public int peek() {
            //如果栈2是空的
            if(Stack_2.isEmpty()){
                //将栈1的所有元素入栈2
                while(!Stack_1.isEmpty()){
                    Stack_2.push(Stack_1.pop());
                }
            }
    
            if (!Stack_2.isEmpty()) {
                return Stack_2.peek();
            }
            throw new RuntimeException("MyQueue空了!");
    
        }
    
        /** Returns whether the queue is empty. */
        public boolean empty() {
            return Stack_1.isEmpty() && Stack_2.isEmpty();
        }
    }
    
    

    欢迎关注

    扫下方二维码即可关注:,微信公众号:code随笔

    微信公众号:code随笔

    相关文章

      网友评论

        本文标题:LeetCode 232题用栈实现队列(Implement Qu

        本文链接:https://www.haomeiwen.com/subject/pjetxhtx.html