题目:只使用递归函数来逆序一个栈,不能使用其他数据结构。
思路:使用两个递归函数
递归函数1:将栈stack的栈底元素返回并移除
过程:栈顶到栈底为3 2 1
1)result为3 ,然后栈顶到栈底为 2 1 这层递归函数出来后(push 3)
2)进入递归 result为2 ,栈中只剩1,这层递归函数出来后(push 2),回到1)中
3)result为1 栈为空 返回1,这层递归函数出来后回到 2)中
public static int getAndRemoveLastElement(Stack<Integer> stack) {
//栈顶元素弹出
int result = stack.pop();
if (stack.isEmpty()) {
return result;
}else {
int last = getAndRemoveLastElement(stack);
stack.push(result); //把弹出来的数再入栈
return last;
}
}
递归函数2:reverse 将栈逆序
每次取出栈底元素 然后 比如栈顶到栈底为 3 2 1 ,取出 1 2 3,然后再递归 把3 2 1依次压入栈。
public static void reverse(Stack<Integer> stack) {
if (stack.isEmpty()) {
return;
}
//获取栈底元素
int i = getAndRemoveLastElement(stack);
reverse(stack);
stack.push(i);
}