比如 一个栈 入栈是 1 2 3 4 5 栈顶是5
我们想这个栈的 顺序变成 5 4 3 2 1 栈顶是1
用递归来实现
package Algorithm;
import java.util.Arrays;
class Solution {
public static int get(int[] stack,int top) {
if(top == 1)
return stack[top-1];
//递归出口只有一个元素直接返回这个元素就是栈底
int stackTop = stack[top-1];
//取出栈顶,后面递归时候能缩减规模
int res = get(stack, --top);
//取出栈顶后,剩下的再取出栈底,这个栈底的值依然是整个函数要返回的栈底
stack[top-1] = stackTop;
top++;
//因为整个函数只是取走栈底,并没有要取走栈顶,因此刚刚为了缩减规模的
//现在需要进行还原
return res;
}
public static int[] ReverseStack(int[] stack,int top ) {
if(top == 1)
return stack;
//如果栈只有一个元素逆序还是这个元素,作为出口直接返回
int bottom = get(stack,top--);
//取走栈底
stack = ReverseStack(stack,top);
//对取走栈底的栈进行翻转,规模进行了缩减,问题得到简化
stack[top++] = bottom;
//防撞完成后压入之前取走的栈底就实现了整个栈的翻转
return stack;
}
public static void main(String[] args) {
int[] stack= {1,2,3,4,5};
System.out.println(Arrays.toString(Solution.ReverseStack(stack, stack.length)));
//需要用Arrays.toString把整形数组作为字符串输出
}
}