-
题目
只能用递归函数实现栈中元素逆序。例如,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 }
-
参考资料
- 《程序员代码面试指南》 左程云