zoukankan      html  css  js  c++  java
  • [Leetcode]225. 用队列实现栈 、剑指 Offer 09. 用两个栈实现队列

    225. 用队列实现栈

    如题

    题解

    在push时候搞点事情:push时入队1,在把队2的元素一个个入队1,再交换队2和队1,保持队1除pushguocheng 始终为空。

    代码

    class MyStack {
        private Queue<Integer> q1;
        private Queue<Integer> q2;
    
        /** Initialize your data structure here. */
        public MyStack() {
            q1=new LinkedList<>();
            q2=new LinkedList<>();
        }
        
        /** Push element x onto stack. */
        public void push(int x) {
            q1.offer(x);
            while(!q2.isEmpty()){
                q1.offer(q2.poll());
            }
            Queue temp=q1;
            q1=q2;
            q2=temp;
        }
        
        /** Removes the element on top of the stack and returns that element. */
        public int pop() {
            return q2.poll();
        }
        
        /** Get the top element. */
        public int top() {
            return q2.peek();
        }
        
        /** Returns whether the stack is empty. */
        public boolean empty() {
            return q2.isEmpty();
        }
    }
    
    /**
     * Your MyStack object will be instantiated and called as such:
     * MyStack obj = new MyStack();
     * obj.push(x);
     * int param_2 = obj.pop();
     * int param_3 = obj.top();
     * boolean param_4 = obj.empty();
     */
    

    剑指 Offer 09. 用两个栈实现队列

    题解

    入队直接入栈1
    出队:若栈2有元素直接出栈,否则若栈1为空则返回-1,若不为空则全部入栈2并弹出栈顶元素。

    代码

    class CQueue {
    LinkedList s1,s2;
    public CQueue() {
    s1 = new LinkedList<>();
    s2 = new LinkedList<>();
    }

    public void appendTail(int value) {
        s1.add(value);
    }
    
    public int deleteHead() {
        if(!s2.isEmpty()){
            return s2.removeLast();
        }else if(s1.isEmpty()){
            return -1;
        }else{
            while(!s1.isEmpty()){
                int val=s1.removeLast();
                s2.add(val);
            }
            return s2.removeLast();
        }
    }
    

    }

    /**

    • Your CQueue object will be instantiated and called as such:
    • CQueue obj = new CQueue();
    • obj.appendTail(value);
    • int param_2 = obj.deleteHead();
      */
  • 相关阅读:
    .Net插件编程模型:MEF和MAF[转载]
    并行任务task
    wpf动画概述
    vs在线工具杂烩
    力挺8天入门wpf【转载】
    vs debug 快捷键
    Visual Studio® 2010 Web Deployment Projects站点编译生成bin同时发表插件
    EasyUI选项卡tab页面处理示例
    显示输入框只能输入的内容
    JqueryeasyUI选项卡选择判定更改内部Iframe地址
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/13179935.html
Copyright © 2011-2022 走看看