专栏首页佳爷的后花媛如何仅用递归函数和栈操作逆序一个栈

如何仅用递归函数和栈操作逆序一个栈

3.如何仅用递归函数和栈操作逆序一个栈


题目:

一个栈一次压入了1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1.将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。

解题:

/**
 * 一个栈一次压入了1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1.将这个栈转置后,
 * 从栈顶到栈底为1、2、3、4、5,
 * 也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。
 * @author dream
 *
 */
public class Problem03_ReverseStackUsingRecursive {

    public static void reverse(Stack<Integer> stack) {
        if (stack.isEmpty()) {
            return;
        }
        int i = getAndRemoveLastElement(stack);
        reverse(stack);     
        stack.push(i);
    }

    /**
     * 这个函数就是删除栈底元素并返回这个元素
     * @param stack
     * @return
     */
    public static int getAndRemoveLastElement(Stack<Integer> stack) {
        int result = stack.pop();
        if (stack.isEmpty()) {
            return result;
        } else {
            int last = getAndRemoveLastElement(stack);
            stack.push(result);
            return last;
        }
    }

    public static void main(String[] args) {
        Stack<Integer> test = new Stack<Integer>();
        test.push(1);
        test.push(2);
        test.push(3);
        test.push(4);
        test.push(5);
        reverse(test);
        while (!test.isEmpty()) {
            System.out.println(test.pop());
        }

    }
    
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • wgpu-rs on the web

    gfx-rs is a Rust project aiming to make low-level GPU programming portable with ...

    仇诺伊
  • 使用vue做一个本地记事本(一)

    这个参考的是一个记事本的demo,为了面试学的vue,看了两天,觉得想要更快的上手最好还是做一个demo。这是我刚开始学的时候做的一些小demo,跟着文档来的。...

    仇诺伊
  • Testing Your Product and Getting Feedback

    平时有很多碎片化时间,比如下班的地铁上,或者等待的时间,我们总喜欢拿出手机玩,这个时间也可以用来学习呢,当然佳爷自己也想学习英语,所以上下班的时间看看。

    仇诺伊
  • 业界 | OpenMMLab 第二版发布:吸引业界「目光」的史上最完整的目标检测工具箱

    AI 科技评论按:去年 10 月,香港中文大学-商汤联合实验室在 OpenMMLab 的首版计划中,开放了 MMCV 和 MMDetection(初期版本)。其...

    AI研习社
  • OpenMMLab 第二版发布:吸引业界「目光」的史上最完整的目标检测工具箱

    AI 科技评论按:去年 10 月,香港中文大学-商汤联合实验室在 OpenMMLab 的首版计划中,开放了 MMCV 和 MMDetection(初期版本)。其...

    AI科技评论
  • 数据正态性的检验方法

    https://www.cnblogs.com/REAY/p/6709177.html

    生物信息知识分享
  • Kubernetes 中用 Sidecar 为应用添加 Oauth 功能

    Kubernetes 的 Pod 中可以同时运行共享网络栈的多个容器,使得 Sidecar 这种服务协作方式更加易于实施。这里我们就使用 Sidecar 方式,...

    崔秀龙
  • swift4.0 对象数据源根据属性分组,时间排序

    //dataArray:[OperationMaintenanceObject] 对象数组

    ZY_FlyWay
  • Python实现jieba分词

    0.说在前面1.结巴分词三种模式2.自定义字典3.动态修改字典4.词性标注及关键字提取5.高级使用6.作者的话

    公众号guangcity
  • React 测试驱动教程

    测试是开发周期中的一个重要组成部分。没有测试的代码被称为:遗留代码。对于我而言,第一次学习 React 和 JavaScript 的时候,感到很有压力。如果你也...

    一个会写诗的程序员

扫码关注云+社区

领取腾讯云代金券