代码随想录算法训练营之JAVA|第九天| 232. 用栈实现队列

今天是第9天刷leetcode,立个flag.

算法挑战链接

232. 用栈实现队列icon-default.png?t=N6B9https://leetcode.cn/problems/implement-queue-using-stacks/description/

第一想法

题目理解:用栈实现队列,栈的特性是先进后出,队列的特性是先进先出。如果单纯使用栈去实现队列是不理智的。那如果我是两个栈,一个栈先进后出,在叠加一次,就可以实现先进先出了。

两个栈的操作相对来说比较简单,会定义一个输出和输入栈,输入的操作在输入栈中操作,输出的操作在输出栈中操作,如果输出栈为空,会去获取输入栈的值作为输出栈的值输出。代码如下

class MyQueue {
    //设计两个栈,一个输入栈,一个输出栈
    //输入栈:只要是输入的就在输入栈里面操作
    //输出栈:只要是输出的就在输出栈里面操作,如果输出栈为空,则将输入栈的东西放入到输出栈中
    private Stack<Integer> pushStack;
    private Stack<Integer> popStack;
    private int stackSize;


    public MyQueue() {
        pushStack = new Stack<>();
        popStack = new Stack<>();
        stackSize = 0;
    }
    //将元素 x 推到队列的末尾 -- 属于输入操作
    public void push(int x) {
        pushStack.push(x);
        stackSize++;
    }
    //从队列的开头移除并返回元素 -- 属于输出操作
    public int pop() {
        if (popStack.isEmpty()){
            //将输入栈的 全部 值放入到输出栈中
            while (!pushStack.empty()){
                popStack.push(pushStack.pop());
            }
        }
        if (!popStack.empty()) {
            stackSize--;
            return popStack.pop();
        }
        return -1;
    }

    public int peek() {
        if (popStack.isEmpty()){
            //将输入栈的 全部 值放入到输出栈中
            while (!pushStack.empty()){
                popStack.push(pushStack.pop());
            }
        }
        if (!popStack.empty()) {
            return popStack.peek();
        }
        return -1;
    }

    public boolean empty() {
        return stackSize==0;
    }
}

看完代码随想录之后的想法 

一致的想法

实现过程中遇到哪些困难 

栈的操作不熟练,在写代码的时候需要去查看api来解决

今日收获

了解了java的另一个结构 stack

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值