题:
一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,从栈顶到栈底为 1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。
解答:
本题考的是栈的操作和递归函数的设计,我们需要设计出两个递归函数。
递归函数一:将栈stack的栈底元素返回并移除。
递归函数二:将栈逆序
具体代码如下:
package com.mxy.algorithm.Exercises.stackAndque;
import java.util.Stack;
public class NixuStack {
private Stack<Integer>stack;
public NixuStack(){
stack=new Stack<>();
}
//给一个栈获取栈底元素->递归实现,并将其他元素重新压入
public static int getLastElement(Stack<Integer>stack){
Integer pop = stack.pop();
if (stack.isEmpty()){
return pop;
}else {
int lastElement = getLastElement(stack);
stack.push(pop);
return lastElement;
}
}
//逆序输出一个栈
public static void reserve(Stack<Integer>stack){
if (stack.isEmpty()){
return;
}
int lastElement = getLastElement(stack);
reserve(stack);
stack.push(lastElement);
}
public static void main(String[] args) {
NixuStack nixuStack = new NixuStack();
nixuStack.stack.push(1);
nixuStack.stack.push(2);
nixuStack.stack.push(3);
nixuStack.stack.push(4);
nixuStack.reserve(nixuStack.stack);
System.out.println(nixuStack.stack.toString());
}
}