程序员代码面试指南--如何仅用递归函数和栈操作逆序一个栈
2018-02-06 17:05
756 查看
/** 如何仅用递归函数和栈操作逆序一个栈 【题目】 一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、 3、2、1。将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就 是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数 据结构。 */ import java.util.Stack; public class C03_ReverseStackUsingRecursive { public static void main(String[] args) { Stack<Integer> stack = new Stack<Integer>(); stack.push(1); stack.push(2); stack.push(3); stack.push(4); stack.push(5); stack.push(6); while(!stack.empty()){ System.out.println(stack.pop());//6 5 4 3 2 1 } System.out.println("---------------"); stack.push(1); stack.push(2); stack.push(3); stack.push(4); stack.push(5); stack.push(6); reverse(stack); while(!stack.empty()){ System.out.println(stack.pop());//1 2 3 4 5 6 } } public static void reverse(Stack<Integer> stack){ if(stack.empty()){//鸿沟 return ; } int i = getAntRemoveLastElement(stack);//获得并移除栈底元素 reverse(stack);//递推 stack.push(i); } private static int getAntRemoveLastElement(Stack<Integer> stack) { int res = stack.pop();//reverse函数决定了stack一定至少有一个元素 if(stack.empty()){ return res;//如果移除后栈为空证明这就是栈底元素了 }else { //否则进行递归 int last = getAntRemoveLastElement(stack); stack.push(res); return last; } } }
相关文章推荐
- 程序员面试指南之如何仅用递归函数和栈操作逆序一个栈
- 003如何仅使用递归函数和栈操作逆序一个栈
- 设计一个有getMin功能的栈 程序员代码面试指南
- 如何仅用递归函数和栈操作逆序一个栈
- 3.如何仅用递归函数和栈操作逆序一个栈
- 程序员代码面试指南--设计一个具有getMin功能的栈
- 如何仅用递归函数和栈操作逆序一个栈
- 栈和队列---如何仅用递归函数和栈操作逆序一个栈
- 栈和队列 如何仅用递归函数和栈操作逆序一个栈
- 数据结构 如何仅用递归函数和栈操作逆序一个栈
- 如何仅用递归函数和栈操作逆序一个栈
- 栈和队列(3)--如何仅用递归函数和栈操作逆序一个栈
- 栈和队列——如何仅用递归函数和栈操作逆序一个栈
- 左程云代码面试指南:仅使用递归函数和栈实现一个逆序栈
- 如何使用递归函数和栈操作逆序一个栈
- 程序员代码面试指南--用一个栈实现另一个栈的排序
- 如何仅用递归函数和栈操作逆序一个栈
- 如何仅用递归函数和栈操作逆序一个栈
- 如何仅用递归函数和栈操作逆序一个栈
- 如何仅用递归函数和栈操作逆序一个栈