如何使用递归函数逆序一个栈
如何使用递归函数逆序一个栈
文章目录
递归函数1
首先,我们需要设计一个能够将栈中的栈底元素返回并移除的递归函数,使用这个函数我们就可以获取到栈底元素并且其他栈中的顺序不变。代码如下:
public static int getAndRemoveLastElement(Stack<Integer> stack) {
int res = stack.pop(); //首先获取此时栈顶元素
if (stack.isEmpty()) { //递归结束条件,若栈空,则返回
return res;
} else {
int last = getAndRemoveLastElement(stack); //继续递归执行
stack.push(res); //在last返回之后,res是在last之前弹出的那个值,所以要把这个值压回
return last; //将栈底的值层层返回
}
}
具体过程如下图:
递归函数2
第二个递归函数所要完成的就是逆序栈的操作了,具体思路就是使用递归函数1逐层获取栈底的值,然后递归函数返回时将所获取到的值压回。代码如下:
public static void reverse(Stack<Integer> stack) {
if (stack.isEmpty()) {
return; //递归结束条件
}
int i=getAndRemoveLastElement(stack); //每次获取栈底的值
reverse(stack); //遇到递归结束条件之后,依次将获取到的值压入
stack.push(i);
}
具体过程如下图:
测试函数
public static void main(String[] args) {
Stack<Integer> myStack = new Stack<>();
final int max = 10;
for (int i = 0; i < max; i++) {
myStack.push(i);
}
reverse(myStack);
while (!myStack.isEmpty()) {
System.out.print(myStack.pop() + " ");
}
}
这是从左程云左神的书上所学的知识的总结,直接用了左神的图。才疏学浅,若有错误欢迎大家多多提出,定虚心接受。