jzoffer-A01:两个队列实现栈

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());
       }
   }

}

}


这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值