题目描述
用递归反转栈,要求不能借助其他数据结构。
思路分析
递归其实就是系统栈,如果只是用递归,可以反转打印出原来栈中的元素,但是,题目要求是反转,就是把原来的栈颠倒过来。
因此,借助递归函数,再依次返回的时候,再依次入栈,就又回去了。因此,我们先用一个递归来找出栈底元素,然后,再用一个递归依次求出栈底,然后再依次入栈,就能实现反转了。
代码
public static void reverseStack(Stack<Integer> stack){
if(stack.isEmpty()){
return;
}
int last=getLast(stack);
reverseStack(stack);
stack.push(last);
}
public static int getLast(Stack<Integer> stack){
int num = stack.pop();
if(stack.isEmpty()){
return num;
}else {
int last= getLast(stack);
stack.push(num);
return last;
}
}