前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用递归逆序一个栈

使用递归逆序一个栈

作者头像
HelloVass
发布2018-09-12 10:28:35
6950
发布2018-09-12 10:28:35
举报
文章被收录于专栏:Hellovass 的博客

题目

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

思路

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

代码语言:javascript
复制

/**
 * 获取栈底元素
 *
 * @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 方法

代码语言:javascript
复制

/**
 * 逆序一个栈
 *
 * @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);

}

测试

代码语言:javascript
复制

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);
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 思路
    • 递归函数一,将 stack 栈底的元素返回并且移除
      • 递归函数二,逆序一个栈,会调用到上面提到的 getAndRemoveLastElement 方法
      • 测试
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档