题解 | #用两个栈实现队列#

用两个栈实现队列

https://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6

思路

队列是先进先出的线性表,而对于栈来说,它是先进后出的线性表

我们使用两个栈来实现队列功能,即当入队元素时,将其存入其中一个栈(输入栈)中:

  • 当出队时,检查当前输出栈中是否有元素,如果没有,判断输入栈中是否存有元素,如果有将输入栈的值全部倒入输出栈中然后出栈栈顶元素。
  • 当入队需要检查输出栈中是否有元素,如果有,将输出栈中元素倒入输入栈
  • 本来还要做空队列无法出队的,但没有指定空队列应该返回什么值,所以就懒得做了

代码

import java.util.Stack;

public class Solution {
    /**
      * 输入栈
      */
    Stack<Integer> inputStack = new Stack<>();
    /**
     * 输出栈
     */
    Stack<Integer> outputStack = new Stack<>();

    /**
     * 入队方法
     *
     * @param node 入队元素
     * @apiNote
     * @since 2023/1/7 18:10
     */

    public void push(int node) {
        // 检查输出栈是否为空
        if (!outputStack.isEmpty()) {
            // 如果输出栈不为空,将输出栈中的数据倒回输入栈
            transfer(inputStack, outputStack);
        }
        // 将元素入栈
        inputStack.push(node);
    }

    /**
     * 出队方法
     *
     * @return int
     * @apiNote
     * @since 2023/1/7 18:11
     */

    public int pop() {
        // 检查输出栈是否为空
        if (outputStack.isEmpty()) {
            if (!inputStack.isEmpty()) {
                // 如果输出栈为空,输入栈不为空,将输入栈中的数据倒入输出栈
                transfer(outputStack, inputStack);
            }
        }
        return outputStack.pop();
    }

    /**
     * 栈转移方法
     *
     * @param mistressors            转移者
     * @param thoseWhoAreTransferred 被转移者
     * @apiNote 将一个栈的数据倒入另一个栈中,并将前者清空
     * @since 2023/1/7 18:27
     */
    public void transfer(Stack<Integer> mistressors,
                         Stack<Integer> thoseWhoAreTransferred) {
        while (!thoseWhoAreTransferred.isEmpty()) {
            mistressors.push(thoseWhoAreTransferred.pop());
        }
    }
}

全部评论

相关推荐

我的人生算是废了,23届裸辞空档一年,存款只能坚持几个月了,找不到像样的工作了,人生何去何从。
梦想是成为七海千秋:这大环境下为什么要裸辞呀,风险真的挺大的,而且社招的话23届没有太多的竞争力,不过既然已经裸辞了就不要焦虑慢慢找。
点赞 评论 收藏
分享
学java时间比较短不到三个月,基本的技术栈都过了一遍就是都不太深,有个小项目。是继续找实习还是沉淀准备秋招呢?找实习的话会花很多时间在八股,放弃的话又怕秋招简历太难看。有无大佬支招
今天java了吗:1.一定要找实习,实习不一定要去,但是找实习过程中的面试经验和心态经验才是最重要的 2.八股本来就是大头,甚至比项目重要 3.这个时间段也是面试比较多的阶段,可以抓住机会锻炼。面试才会发现自己的不足,感觉自己会了和能给面试官娓娓道来是两码事
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务