一天一道算法题(2)---如何仅用递归函数逆序一个栈

  • 题目

只能用递归函数实现栈中元素逆序。例如,1,2,3,4,5依次压栈,栈中元素为从栈顶到栈底5,4,3,2,1。要求只用递归实现栈的逆序。

 

  • 解答

设计两个递归函数

递归函数一:将栈的栈底元素返回并移除 getAndRemoveLastElement

递归函数二:逆序一个栈 reverse

 1   public int getAndRemoveLastElement(Stack<Integer> stack) { //得到栈底元素并它移除,并且其它元素压回栈
 2         int result = stack.pop();
 3         if (stack.isEmpty()) {
 4             return result;
 5         } else {
 6             int last = getAndRemoveLastElement(stack);
 7             stack.push(result); //回溯,将其它元素重新压回栈
 8             return last; //返回栈底元素
 9         }
10     }
11     
12     /**
13      * 以1,2,3为例,从栈顶到栈底依次为3,2,1
14      */
15     public void reverse(Stack<Integer> stack) {
16         if (stack.isEmpty()) {
17             return;
18         }
19         int i = getAndRemoveLastElement(stack); //得到栈底元素
20         reverse(stack); //递归,所以i依次为1,2,3
21         stack.push(i);  //回溯,依次压入3,2,1
22     }
  • 参考资料

  1. 《程序员代码面试指南》 左程云
posted @ 2017-03-31 23:05  杨同不爱吃洋葱  阅读(672)  评论(0编辑  收藏  举报