LeetCode练习 - 用栈实现队列(Java)

题目:

用两个栈实现一个队列

思路:

思路:
       栈的特点:先进后出;队列的特点:先进先出
       创建两个栈A,B;A用于入队列,B用于出队列
       1、入队
            (1)若栈B不为空,先将B中的元素全部放到A中
            (2)将要入队的元素放入A中
       2、出队
            (1)若队列为空,直接返回null;
            (2)若栈A不为空,先将A中的元素全部放到B中
            (3)将B的栈顶元素出栈即可
       3、取队顶元素
            (1)若队列为空,直接返回null;
            (2)若栈A不为空,先将A中的元素全部放到B中
            (3)取B的栈顶元素即可
       4、判断队空
            若两个栈全部为空,即队列为空

代码:

import java.util.Stack;

public class MyQueueByTwoStack {

    //用两个栈实现队列
    /*
    思路:
           栈的特点:先进后出;队列的特点:先进先出
           创建两个栈A,B;A用于入队列,B用于出队列
           1、入队
                (1)若栈B不为空,先将B中的元素全部放到A中
                (2)将要入队的元素放入A中
           2、出队
                (1)若队列为空,直接返回null;
                (2)若栈A不为空,先将A中的元素全部放到B中
                (3)将B的栈顶元素出栈即可
           3、取队顶元素
                (1)若队列为空,直接返回null;
                (2)若栈A不为空,先将A中的元素全部放到B中
                (3)取B的栈顶元素即可
           4、判断队空
                若两个栈全部为空,即队列为空
     */

    //先创建两个栈
    Stack<Integer> A = new Stack<>();
    Stack<Integer> B = new Stack<>();
    //1、入队
    public void offer(int x){
        //若栈B不为空,先将B中的元素全部放到A中
        if(!B.isEmpty()){
            int temp = B.pop();
            A.push(temp);
        }
        A.push(x);
    }
    //2、出队
    public Integer poll(){
        if(empty()){
            return null;
        }
        if(!A.isEmpty()){
            int tmp = A.pop();
            B.push(tmp);
        }
        return B.pop();
    }
    //3、取队顶元素
    public Integer peek(){
        if(empty()){
            return null;
        }
        if(!A.isEmpty()){
            int tmp = A.pop();
            B.push(tmp);
        }
        return B.peek();
    }
    //4、判断队空
    public boolean empty(){
        return A.isEmpty() && B.isEmpty();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值