要求:对一个栈进行逆序,不使用中间变量
思路:每次取栈底元素,经过拿出来放进去的递归,就翻转了。
代码:
package 算法.递归练习题;
import java.util.Stack;
/**
* 翻转栈,不用中间存储空间
*/
public class ReverseStackUsingRecursive {
public static void main(String[] args) {
//创建一个栈
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
//翻转栈内数据
fz(stack);
//打印
System.out.println(stack.toString());
}
/**
* 思路
* @param stack
*/
private static void fz(Stack<Integer> stack) {
if (stack.isEmpty()) {
return;
}
//拿到栈底数据
Integer num = f(stack);
//递归 一直到 取空
fz(stack);
//栈底底数据放进去 ,因为每次都取的栈底数据,放进去的时候就是倒序的
stack.push(num);
}
/**
* 拿到栈底数据
* @param stack
* @return
*/
private static Integer f(Stack<Integer> stack) {
//如果到底了就返回
if (stack.size() == 1) {
return stack.pop();
}
//没到底就继续找
Integer a = stack.pop();
Integer r = f(stack);
//还原
stack.push(a);
//返回当前栈底数据
return r;
}
}