题目描述

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

题解

题源:《程序员代码面试指南》

import java.util.Scanner;
import java.util.Stack;public class Main {public static void main(String[] args) {// 输入Scanner sc = new Scanner(System.in);int total = sc.nextInt();Stack<Integer> stack = new Stack<>();for (int i = 0; i < total; i++) {stack.push(sc.nextInt());}// 翻转reverse(stack);// 输出(翻转后的栈无法直接从栈底输出,为了达到效果,借助另一个栈输出)Stack<Integer> out = new Stack<>();for (int i = 0; i < total; i++) {out.push(stack.pop());}for (int i = 0; i < total; i++) {System.out.print(out.pop() + " ");}}/*** 递归获取并删除栈底元素*/public static int getAndRemoveLast(Stack<Integer> stack) {int res = stack.pop();if (stack.isEmpty()) {return res;} else {int last = getAndRemoveLast(stack);stack.push(res);return last;}}/*** 递归实现栈的翻转*/public static void reverse(Stack<Integer> stack) {if (stack.isEmpty()) return;int i = getAndRemoveLast(stack); // 获取并删除栈底元素reverse(stack);stack.push(i); // 将原有栈底元素重新压入翻转之后的栈}
}

附:书上配套代码

package chapter_1_stackandqueue;import java.util.Stack;public class Problem_03_ReverseStackUsingRecursive {public static void reverse(Stack<Integer> stack) {if (stack.isEmpty()) {return;}int i = getAndRemoveLastElement(stack);reverse(stack);stack.push(i);}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());}}}

左神算法:用递归函数和栈逆序一个栈(Java版)相关推荐

  1. 左神算法:将搜索二叉树转换成双向链表(Java版)

    本题来自左神<程序员代码面试指南>"将搜索二叉树转换成双向链表"题目. 题目 对二叉树的节点来说,有本身的值域,有指向左孩子节点和右孩子节点的两个指针:对双向链表的节点 ...

  2. 左神算法:环形单链表的约瑟夫问题(Java版)

    本题来自左神<程序员面试代码指南>"环形单链表的约瑟夫问题"题目. 题目 据说,著名犹太历史学家 Josephus 有过以下故事: 在罗马人占领乔塔帕特后,39 个犹太 ...

  3. function 多个函数用一个_用递归函数和栈逆序一个栈

    实现栈中元素的逆序,而且只能用到递归,不能使用其他的数据结构. 1 栈和递归 栈是先进后出,后进先出的数据结构.使用两个递归函数来实现: 1.将栈底元素返回并返回.每次递归进入下一层,直到栈为空时,返 ...

  4. 左神算法:如何较为直观地打印二叉树(Java版)

    本题来自左神<程序员代码面试指南>"如何较为直观地打印二叉树"题目. 题目 二叉树可以用常规的三种遍历结果来描述其结构,但是不够直观,尤其是二叉树中有重复值的时候,仅通 ...

  5. 如何仅用递归函数和栈操作逆序一个栈——你要先用stack实现,再去改成递归——需要对递归理解很深刻才能写出来...

    /**  * 如何仅用递归函数和栈操作逆序一个栈  * 题目:  * 一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1.  * 将这个栈转置后,从栈顶到栈底为1,2,3,4, ...

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

    [题目]​ 一个栈依次压入1.2.3.4.5,那么从栈顶到栈底分别为5.4.3.2.1.将这个栈转置后,从栈顶到栈底为1.2.3.4.5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他 ...

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

    如何仅用递归函数和栈操作逆序一个栈 题目: 一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1. 将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序, ...

  8. 编程3:仅用递归函数和栈操作逆序一个栈

    <?php header("content-type:text/html;charset=utf-8"); /** 仅用递归函数和栈操作逆序一个栈 P8*/function ...

  9. 栈和队列之仅用递归函数和栈操作逆序一个栈

    import java.util.Stack;/*** recursion 递归的意思* @author chenyu* 题目:仅用递归函数和栈操作逆序一个栈,列如一次压入1.2.3.4.5 栈顶到栈 ...

最新文章

  1. 互联网巨头终极战场:得开发者得天下
  2. HomeKit推出已两年 但是苹果在智能家居上却被对手甩开了差距
  3. 在.net开发中使用Log4Net组件
  4. python性能优化的一些建议(一)
  5. 利用全局数据实现数据通信
  6. mysql示例数据库
  7. Elasticsearch--入门-_put post修改数据---全文检索引擎ElasticSearch工作笔记007
  8. 三分钟零代码实现CAD网页Web快速看图和高科技效果展示
  9. 自定义数据类型的指针的含义
  10. 什么是云渲染?云渲染应用场景有哪些?
  11. USB鼠标、键盘数据格式
  12. 你也可以是天才,心有多大,舞台就有多大
  13. 小程序底部兼容iphoneX
  14. dp线长什么样子_如何选一根好的DP线?不同DP线有什么区别?
  15. 面试连环炮:从HashSet开始,一路怼到CPU
  16. C语言——常量,变量
  17. 多机房UPS及环境集中监控方案丨UPS环境综合监控主机
  18. Android 64 bit的一些兼容性分析
  19. 15款最好用的思维导图(心智图 )工具
  20. autofac 作用域_C#编程之.Net Core 学习之路-AutoFac的使用

热门文章

  1. CodeForces - 553C Love Triangles(二分图)
  2. Logistic回归与牛顿迭代法
  3. Hash冲突处理终极版
  4. VS Code配置Java万能环境
  5. protobuf流的反解析Message
  6. TCP发送接口(如send(),write()等)的返回值与成功发送到接收端的数据量无直接关系
  7. __declspec(novtable) 的用法
  8. EventBus设计与实现分析——特性介绍
  9. epoll背后的原理
  10. 二叉树构建及双向链表