zoukankan      html  css  js  c++  java
  • LeetCode--255--用队列实现栈(java版)

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

    • push(x) -- 元素 x 入栈
    • pop() -- 移除栈顶元素
    • top() -- 获取栈顶元素
    • empty() -- 返回栈是否为空

    注意:

    • 你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。
    • 你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
    • 你可以假设所有操作都是有效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)。

    超级慢的。

     1 class MyStack {
     2     private LinkedList<Integer> list1 ;
     3     private LinkedList<Integer> list2 ;
     4     /** Initialize your data structure here. */
     5     public MyStack() {
     6         this.list1   = new LinkedList<Integer>();
     7         this.list2 = new LinkedList<Integer>();
     8     }
     9     
    10     /** Push element x onto stack. */
    11     public void push(int x) {
    12         list1.add(x);
    13     }
    14     
    15     /** Removes the element on top of the stack and returns that element. */
    16     public int pop() {
    17         int res = 0;
    18         if(list1.size()==1){
    19             return list1.poll();
    20         }else{
    21             while(list1.size()!=1){
    22                 list2.add(list1.poll());
    23             }
    24             res = list1.poll();
    25             while(!list2.isEmpty()){
    26                 list1.add(list2.poll());
    27             }
    28         }
    29         return res;
    30     }
    31     
    32     /** Get the top element. */
    33     public int top() {
    34         int res = 0;
    35         if(list1.size() == 1){
    36             res = list1.peek();
    37             
    38         }else{
    39             while(list1.size()!=1){
    40                 list2.add(list1.poll());
    41             }
    42             res = list1.peek();
    43             list2.add(list1.poll());
    44             while(!list2.isEmpty()){
    45                 list1.add(list2.poll());
    46             }
    47         }
    48         return res;
    49     }
    50     
    51     /** Returns whether the stack is empty. */
    52     public boolean empty() {
    53         if(list1.isEmpty() && list2.isEmpty()){
    54             return true;
    55         }else{
    56             return false;
    57         }
    58     }
    59 }
    60 
    61 /**
    62  * Your MyStack object will be instantiated and called as such:
    63  * MyStack obj = new MyStack();
    64  * obj.push(x);
    65  * int param_2 = obj.pop();
    66  * int param_3 = obj.top();
    67  * boolean param_4 = obj.empty();
    68  */

    这个比较快:

     1 class MyStack {
     2 
     3     List<Integer> queue1=new LinkedList();
     4     List<Integer> queue2=new LinkedList();
     5     private int num=1;
     6     /** Initialize your data structure here. */
     7     public MyStack() {
     8         
     9     }
    10     
    11     /** Push element x onto stack. */
    12     public void push(int x) {
    13         if(num==1) {
    14             queue1.add(x);
    15         }else {
    16             queue2.add(x);
    17         }
    18     }
    19     
    20     /** Removes the element on top of the stack and returns that element. */
    21     public int pop() {
    22         if(num==1) {
    23             while(queue1.size()!=1) {
    24                 queue2.add(queue1.remove(0));
    25             }
    26             num=2;
    27             return queue1.remove(0);
    28         }else {
    29             while(queue2.size()!=1) {
    30                 queue1.add(queue2.remove(0));
    31             }
    32             num=1;
    33             return queue2.remove(0);
    34         }
    35     }
    36     
    37     /** Get the top element. */
    38     public int top() {
    39         if(num==1) {
    40             return queue1.get(queue1.size()-1);
    41         }else {
    42             return queue2.get(queue2.size()-1);
    43         }
    44     }
    45     
    46     /** Returns whether the stack is empty. */
    47     public boolean empty() {
    48         if(num==1) {
    49             return queue1.isEmpty();
    50         }else {
    51             return queue2.isEmpty();
    52         }
    53     }
    54 }
    55 
    56 /**
    57  * Your MyStack object will be instantiated and called as such:
    58  * MyStack obj = new MyStack();
    59  * obj.push(x);
    60  * int param_2 = obj.pop();
    61  * int param_3 = obj.top();
    62  * boolean param_4 = obj.empty();
    63  */

    最简单:

     1 class MyStack {
     2     private Queue<Integer> data;
     3     
     4     public MyStack() {
     5         data = new LinkedList<>();
     6     }
     7 
     8     public void push(int x) {
     9         data.offer(x);
    10         //将队列中前面已经逆序的元素放在x元素后面,使得整体逆序
    11         for (int i = 0; i < data.size() - 1; i++) {
    12             data.offer(data.poll());
    13         }
    14     }
    15 
    16     public int pop() {
    17         return data.poll();
    18     }
    19 
    20     public int top() {
    21         return data.peek();
    22     }
    23 
    24     public boolean empty() {
    25         return data.isEmpty();
    26     }
    27 }
    28 
    29 /**
    30  * Your MyStack object will be instantiated and called as such:
    31  * MyStack obj = new MyStack();
    32  * obj.push(x);
    33  * int param_2 = obj.pop();
    34  * int param_3 = obj.top();
    35  * boolean param_4 = obj.empty();
    36  */

    2019-03-04 23:00:41

  • 相关阅读:
    BZOJ 1040 (ZJOI 2008) 骑士
    BZOJ 1037 (ZJOI 2008) 生日聚会
    ZJOI 2006 物流运输 bzoj1003
    ZJOI 2006 物流运输 bzoj1003
    NOI2001 炮兵阵地 洛谷2704
    NOI2001 炮兵阵地 洛谷2704
    JLOI 2013 卡牌游戏 bzoj3191
    JLOI 2013 卡牌游戏 bzoj3191
    Noip 2012 day2t1 同余方程
    bzoj 1191 [HNOI2006]超级英雄Hero——二分图匹配
  • 原文地址:https://www.cnblogs.com/NPC-assange/p/10473977.html
Copyright © 2011-2022 走看看