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

用两个栈实现队列

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

全部评论

相关推荐

ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务