题目
一个栈依次压入1,2,3;此时栈顶到栈底元素分别为:3,2,1;将栈反转,使得栈顶到栈底元素为:1,2,3,仅限递归函数,并且不能使用其他数据结构
思路
- 使用两个函数reverse和getAndRemoveLastElement函数
- 详细介绍reverse,reverse负责将栈逆序,通过getAndRemoveLastElement每次可获得当前栈的栈底元素,并且当前栈已经将栈底元素去除掉,通过自身递归,直至栈为空位置,将之前每一轮获得的栈底元素不断地压栈来实现逆序
- 详细介绍getAndRemoveLastElement,该函数主要实现弹出栈底元素;核心在于,每一轮pop栈顶元素,自身递归,栈空时,返回栈底的元素,但是并不将栈底元素压栈,因为是if-else的逻辑关系,源码的else中push的是当前轮的result,举个例子:如果当前栈中的元素是2,1(栈顶到栈底)
- result=2,进入else,调用自身,result=1,返回result,last=1,push 的result=2。因此该函数实现了pop栈底元素
源码
public int getAndRemoveLastElement(Stack<Integer> stack){
int result=stack.pop();
if(stack.empty()){
return result;
}else{
int last=getAndRemoveLastElement(stack);
stack.push(result);
return last;
}
}
public void reverse(Stack<Integer> stack){
if(stack.empty()){
return ;
}
int i =getAndRemoveLastElement(stack);
reverse(stack);
stack.push(i);
}