题目:
一个栈依次压入1、2、3、4、5,那么从栈顶到栈地分别为5、4、3、2、1。将这个栈转置后,从栈顶到栈低为1、2、3、4、5,
也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构
package com.zzj.Chapter1.three;
import java.util.Stack;
public class Done_test {
/**
* 这个方法的目的是拿到栈底元素并返回,且使得这个栈下沉一位
* @param stack
* @return
*/
public static int getAndRemoveLastElement(Stack<Integer> stack) {
//首先出栈拿到这个元素
int result = stack.pop();
//来进行判断是否需要递归
if(stack.isEmpty()) {
//如果到了栈底了,直接返回
return result;
}else {
//返回了栈底元素,后进行不断返回,将返回的栈底元素,保存在last变量中
int last = getAndRemoveLastElement(stack);
//既然上一步已经找到栈底元素且保存在last变量中,这个时候需要入正确的栈元素,达到下沉的效果
stack.push(result);
//不断向上返回咱们找到的栈底元素,让之前的栈帧恢复,并且返回这个栈底元素
return last;
}
}
/**
* 通过getAndRemoveLastElement不断拿到栈底元素后,等到栈空,依次入栈,即可达到逆置栈的效果
* @param stack
*/
public static void reverse(Stack<Integer> stack) {
if(stack.isEmpty()){
return;
}
//首先拿到当前栈底元素,保存在i变量中,等到用于恢复
int i = getAndRemoveLastElement(stack);
//那么递归本方法,直至这个栈为空栈
reverse(stack);
//第一次到了下面这一步,意味着当前栈已经为空,开始反向入之前保存的栈底元素
stack.push(i);
}
}