zoukankan      html  css  js  c++  java
  • LeetCode-225.Implement Stack using Queues

    Implement the following operations of a stack using queues.

    • push(x) -- Push element x onto stack.
    • pop() -- Removes the element on top of the stack.
    • top() -- Get the top element.
    • empty() -- Return whether the stack is empty.

    Example:

    MyStack stack = new MyStack();
    stack.push(1);
    stack.push(2);  
    stack.top();   // returns 2
    stack.pop();   // returns 2
    stack.empty(); // returns false

    Notes:

    • You must use only standard operations of a queue -- which means only push to backpeek/pop from frontsize, and is empty operations are valid.
    • Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue.
    • You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).

    使用两个队列

    输入时间复杂度O(1),输出复杂度O(n)

     1 class MyStack {//栈 队列 my
     2     Queue<Integer> queue1 ;
     3     Queue<Integer> queue2 ;
     4     int top;
     5 
     6     /** Initialize your data structure here. */
     7     public MyStack() {
     8         queue1 = new LinkedList<Integer>();
     9         queue2= new LinkedList<Integer>();
    10     }
    11     
    12     /** Push element x onto stack. */
    13     public void push(int x) {
    14         queue1.add(x);
    15         top=x;
    16     }
    17     
    18     /** Removes the element on top of the stack and returns that element. */
    19     public int pop() {
    20         if(queue1.isEmpty()){
    21             while(1<queue2.size()){
    22                 top = queue2.poll();
    23                 queue1.add(top);
    24             }
    25             return queue2.poll();
    26         }
    27         else{
    28             while(1<queue1.size()){
    29                 top = queue1.poll();
    30                 queue2.add(top);
    31             }
    32             return queue1.poll();
    33         }
    34     }
    35     
    36     /** Get the top element. */
    37     public int top() {
    38         return top;
    39     }
    40     
    41     /** Returns whether the stack is empty. */
    42     public boolean empty() {
    43         return queue1.isEmpty()&&queue2.isEmpty();
    44     }
    45 }

    可使用一个队列完成

    class MyStack {
        Queue<Integer> q1 ;
    
        /** Initialize your data structure here. */
        public MyStack() {
            q1 = new LinkedList<Integer>();
        }
        
        /** Push element x onto stack. */
        public void push(int x) {
            q1.add(x);
            int sz = q1.size();
            while (sz > 1) {
                q1.add(q1.remove());
                sz--;
            }
        }
        
        /** Removes the element on top of the stack and returns that element. */
        public int pop() {
           q1.remove();
        }
        
        /** Get the top element. */
        public int top() {
            return q1.peek();
        }
        
        /** Returns whether the stack is empty. */
        public boolean empty() {
            return q1.isEmpty();
        }
    }

    相关题

    使用栈实现队列 LeetCode232 https://www.cnblogs.com/zhacai/p/10565130.html

  • 相关阅读:
    POJ 3687 Labeling Balls <<拓扑排序
    FATFS 初学之 f_mount
    STM8 低功耗时钟管理
    还记得 C中带参宏的 "#"号吗?
    8.9并发编程(一)
    8.8网络编程(三)
    8.7网络编程(二)
    8.6网络编程(一)
    7.30反射、元类及项目生命周期
    7.29多态
  • 原文地址:https://www.cnblogs.com/zhacai/p/10565181.html
Copyright © 2011-2022 走看看