题目:一个栈依次压入1,2,3,4,5那么从栈顶到栈底分别为5,4,3,2,1。将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,而不能用另外的数据结构。
解答:本题考察栈的操作和递归函数的设计,我们需要设计出两个递归函数。
递归函数一:将栈stack的栈底元素返回并移除。
public int getAndRemoveLast(Stack<Integer> stack)
{
int result=stack.pop();
if(stack.empty())
return result;
else
{
int last= getAndRemoveLast(stack);
stack.push(result);
return last;
}
}
递归函数二:逆序一个栈,该方法使用了上面的getAndRemoveLast(Stack<Integer> stack)方法。
public void reverse(Stack<Integer> stack)
{
if(stack.empty())
return;
int last=getAndRemoveLast(stack);
reverse(stack);
stack.push(last);
}