使用递归逆序一个栈

题目

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

思路

递归函数一,将 stack 栈底的元素返回并且移除

/**
 * 获取栈底元素
 *
 * @param stack 传入的栈
 * @param <E>   返回的元素类型
 * @return 栈底元素
 */
private static <E> E getAndRemoveLastElement(Stack<E> stack) {

    E result = stack.pop();

    if (stack.isEmpty()) {
        return result;
    } else {
        E last = getAndRemoveLastElement(stack);
        stack.push(result);
        return last;
    }

}

递归函数二,逆序一个栈,会调用到上面提到的 getAndRemoveLastElement 方法

/**
 * 逆序一个栈
 *
 * @param stack 被操作的栈
 * @param <E>   栈中元素类型
 */
public static <E> void reverse(Stack<E> stack) {

    if (stack.isEmpty()) {
        return;
    }

    E element = getAndRemoveLastElement(stack);
    reverse(stack);

    stack.push(element);

}

测试

public class Main {

    public static void main(String[] args) {

        Stack<Integer> testStack = new Stack<>();

        for (int i = 1; i <= 5; i++) {
            testStack.push(i);
        }

        StackReverseUtil.reverse(testStack);
    }
}

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏about云

spark开发基础之Scala详解apply方法

问题导读 1.什么情况下调用apply方法? 2.apply你认为有哪些作用? 3.方法调用属于apply什么功能? apply网上很多资料,但是总感觉总...

3656
来自专栏desperate633

LintCode 最长公共子串代码

831
来自专栏LanceToBigData

Java常用类(一)之Object类详解

大家都知道Object是所有类的父类,任何类都默认继承Object 理论上Object类是所有类的父类,即直接或间接的继承java.lang.Object类。由...

2378
来自专栏云霄雨霁

数据结构----队列

1060
来自专栏Script Boy (CN-SIMO)

Java中的字符串

  Java语言中,把字符串作为对象来处理,类String就可以用来表示字符串(类名首字母都是大写的)。 1.字符串常量 字符串常量是用双引号括住的一串字符。...

2180
来自专栏机器学习从入门到成神

海量数据处理之Bti-map详解

    所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以...

1551
来自专栏闻道于事

Java之字符串String,StringBuffer,StringBuilder

String类: String类即字符串类型,并不是Java的基本数据类型,但可以像基本数据类型一样使用,用双引号括起来进行声明。在Java中用String类的...

3785
来自专栏技术专栏

Scala入门与进阶(三)- 函数

默认参数:在函数定义时,允许指定参数的默认值 $SPARK_HOME/conf/spark-defaults.conf

1103
来自专栏石奈子的Java之路

原 JVM基础命令

2717
来自专栏desperate633

LeetCode 115. Distinct Subsequences题目分析代码

给出字符串S和字符串T,计算S的不同的子序列中T出现的个数。 子序列字符串是原始字符串通过删除一些(或零个)产生的一个新的字符串,并且对剩下的字符的相对位置没...

752

扫码关注云+社区

领取腾讯云代金券