解题思路:这里使用了两个递归函数
getLastValueAndRemove():取出栈中的最后一个元素并在栈中移除;实现就是将栈中元素全部出栈,然后在入栈
doReverse():调用上面的函数,不停的将最后一个元素移出来,全部移除后入栈,逆序。
package com.zuochengyun.book.chapterone;
import java.util.Stack;
/**
* 使用递归逆序一个栈
* @author
*
*/
public class ZuoBookThree {
private static Stack<Integer> stack1=new Stack<>();
private static void init(int[] arr) {
for(int i=0;i<arr.length;i++) {
stack1.add(arr[i]);
}
}
/**
* 返回最后一个元素且最后一个元素不如栈,其余元素入栈,栈中顺序和之前一样。
* @return
*/
private static int getLastValueAndRemove() {
int value = stack1.pop();
if(stack1.isEmpty()) {
return value;
}else {
int last=getLastValueAndRemove();
stack1.push(value);
return last;
}
}
private static void doReverse() {
int last =getLastValueAndRemove();
if(!stack1.isEmpty()) {
doReverse();
}
stack1.push(last);
}
public static void main(String[] args) {
int[] arr= {5,4,3,2,1};
init(arr);
doReverse();
while(!stack1.isEmpty()) {
System.out.println(stack1.pop());
}
}
}