题目:一个栈依次压入1、2、3、4、5,那么栈顶到栈底分别为5、4、3、2、1。将这个栈逆序之后从栈顶到栈底分别为1、2、3、4、5。
import org.junit.Test;
import java.util.Stack;
public class Reverse {
@Test
public void test(){
Stack<Integer> stack=new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
reverse(stack);
while (!stack.isEmpty()){
System.out.println(stack.pop());
}
}
public static int getLastNumber(Stack<Integer> stack){
int last=stack.pop();//last的变化:5、4、3、2、1
if(stack.isEmpty()){
return last;//返回的一定是栈最底端的数
}else {
int temp=getLastNumber(stack);//递归调用,栈空后继续往下执行
stack.push(last);//依次push进去的数是:2、3、4、5
return temp;//temp一直是栈最底端的数
}
}
public static void reverse(Stack<Integer> stack){
if(stack.isEmpty()){
return;
}
//得到栈底的数,last依次变化为:1、2、3、4、5
//当last=1时,stack(顶到底):5、4、3、2
int last=getLastNumber(stack);
//因为我们要得到的数从栈顶到栈底是:1、2、3、4、5
//因此利用递归的特性,last push进栈的数依次为:5、4、3、2、1
reverse(stack);
stack.push(last);
}
}
运行结果:
![测试结果](https://img-blog.csdnimg.cn/20190601190439408.png)