一、题目
题目描述
一个栈依次压入1,2,3,4,5那么从栈顶到栈底分别为5,4,3,2,1。
将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现了栈中元素的逆序,
请设计一个算法实现逆序栈的操作,但是只能用递归函数来实现,而不能用另外的数据结构。
给定一个栈Stack以及栈的大小top,请返回逆序后的栈。
测试样例:
二、分析
一个数列1,2,3,4,5,如果想变成5,4,3,2,1,可通过以下方式得到。
1与5对换,此时为5,2,3,4,1
2与4对换,此时为5,4,3,2,1
1、通过以上两步可以找到递归的边界情况,当对换的次数超过数列长度的一半时,即结束。
2、递归函数的作用是完成一次对换。
public class YongDiGuiHanShuHeZhan {
public static int[] reverseStackRecursively(int[] stack, int top) {
reverse(stack, 0);
return stack;
}
/**
*
* @param stack 要翻转的数组
* @param index 翻转次数
*/
public static void reverse(int []stack,int index){
if(index>=stack.length/2){//边界情况
return;
}
//完成一次交换
int temp=stack[index];
stack[index]=stack[stack.length-index-1];
stack[stack.length-index-1]=temp;
reverse(stack, index+1);//
}
public static void main(String[] args) {
int a[]={1,2,3,4,5};
int b[]=reverseStackRecursively(a,5);
for(int i=0;i<b.length;i++){
System.out.print(b[i]);
}
}
}
There’s always a bit of something hidden when you say nothing.