-
题目
只能用递归函数实现栈中元素逆序。例如,1,2,3,4,5依次压栈,栈中元素为从栈顶到栈底5,4,3,2,1。要求只用递归实现栈的逆序。
-
解答
设计两个递归函数
递归函数一:将栈的栈底元素返回并移除 getAndRemoveLastElement
递归函数二:逆序一个栈 reverse
import java.util.Stack;
/**
* recursion 递归的意思
* @author chenyu
* 题目:仅用递归函数和栈操作逆序一个栈,列如一次压入1、2、3、4、5 栈顶到栈底是5、4、3、2、1
* 将这个栈转置后栈顶到栈底依次为1、2、3、4、5
*
* 思路:需要两递归函数
* 第一个递归函数是去除栈底并且得到栈底的函数
* 第二个递归函数是依次调用第一个递归函数,然后再压入栈
*/
public class ReverseStackByRecursion {
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);
reverse(stack);
while(!stack.empty()){
System.out.println(stack.pop());
}
}
/**
* 去除栈底并且得到栈底的函数
* @param stack
* @return
*/
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; //返回栈底元素
}
}
/**
* 得到的最后一个元素递归压入栈
* @param stack
*/
public static void reverse(Stack<Integer> stack){
if(stack.empty()){
return;
}
int i=getAndRemoveLastElement(stack); //得到栈底元素
reverse(stack); //递归,所以i依次为1,2,3
stack.push(i); //回溯,依次压入3,2,1
}
}
结果:
1
2
3
4
5
转自:http://blog.csdn.net/u011068702/article/details/49983415