jzoffer-A01:两个队列实现栈

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011877584/article/details/82119671

package com.fjf.test;

import java.util.ArrayDeque;
import java.util.Queue;

/**
*
* @author fjf
* 2018年8月18日 19:16:52
* 用两个队列实现栈
* 出的时候需要中转,露出“最后进来的”,让后进的先出
*/
public class TestTwoQueueForStack {

public static void main(String[] args) {
    Solution s = new Solution();
    s.add(1);
    s.add(2);
    s.add(3);
    s.remove();
    s.add(4);
    s.add(5);
    s.remove();
    s.remove();
    s.remove();
    s.remove();

    System.out.println("---------两种方法分界线--------------");

    Solution2 s2 = new Solution2();
    s2.add(1);
    s2.add(2);
    s2.add(3);
    s2.remove();
    s2.add(4);
    s2.add(5);
    s2.remove();
    s2.remove();
    s2.remove();
    s2.remove();



}

//queue2 作缓存,作中转站(挪数据)         queue1 作进出操作
static class Solution{
   Queue<Integer> queue1 = new ArrayDeque<Integer>(); 
   Queue<Integer> queue2 = new ArrayDeque<Integer>(); 

   public void add(int node){
       while(!queue2.isEmpty()){
           queue1.add(queue2.remove()); 
       }
       queue1.add(node);
   }

   public int remove(){

       while(!queue2.isEmpty()){
           queue1.add(queue2.remove()); 
       }
       //当queue1里面的多于一个
       while(queue1.size()>1){
           queue2.add(queue1.remove());
       }
       //剩一个让queue1 输出
      int value = queue1.remove();
       System.out.println(value);
       return value;
   }

}

//数据进queue1 ,  出的时候互相中转。   推荐
static class Solution2{
   Queue<Integer> queue1 = new ArrayDeque<Integer>(); 
   Queue<Integer> queue2 = new ArrayDeque<Integer>(); 

   public void add(int node){
       queue1.add(node);
   }

   public int remove(){
       //总体里面是有值的
       int value ;
       if(qsize()>0){
            //先来看看是不是queue1里面有
            if(!queue1.isEmpty()){   
                putToanother(queue1, queue2);
                value = queue1.remove();
            }else{   
                //queue1里面没有,那就是queue2里面有值
                putToanother(queue2, queue1);
                value = queue2.remove();
            }
       }else{
          System.out.println("为空了");  
          value = -1;
       }
       System.out.println(value);
       return value;
   }

   //总的值 长度
   private int qsize(){
       return queue1.size()+queue2.size();
   }


   private void putToanother(Queue qfrom,Queue qTo){
       while(qfrom.size()>1){
           qTo.add(qfrom.remove());
       }
   }

}

}


这里写图片描述

猜你喜欢

转载自blog.csdn.net/u011877584/article/details/82119671