题目
一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。
解法
import java.util.Stack;
public class recursionToStackReverse {
//这个递归函数的作用是返回当前栈的栈底元素并且移除
public static Integer getAndRemoveLastElement(Stack<Integer> stack){
Integer currentElement = stack.pop();
if(stack.isEmpty()){
return currentElement;
}else{
Integer last = getAndRemoveLastElement(stack);
stack.push(currentElement);
return last;
}
}
//这个递归函数通过调用getAndRemoveLastElement函数来实现逐步压栈逆序的操作。
public static void reverse(Stack<Integer> stack){
if(stack.isEmpty()){
return;
}
Integer i = getAndRemoveLastElement(stack);
reverse(stack);
stack.push(i);
}
}
getAndRemoveLastElement递归函数完成栈底元素的操作。
reverse递归函数中的局部变量i存储每一步的栈底元素,通过递归函数的特性逐步压栈,实现栈的逆序。
测试
static修饰的静态成员函数可以通过类直接引用!
import java.util.Stack;
public class a1_b3_recursionToStackReverse {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<Integer>();
stack.push(1);
stack.push(2);
stack.push(3);
recursionToStackReverse.reverse(stack);
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
}
}