日月的弯刀  
Where Amazing Happens!

转载http://www.cnblogs.com/haozhengfei/p/60409057a7c7c646e991ca8f45f5e443.html 


栈的翻转练习题

 
栈的翻转练习
 

第5节 栈的反转练习题

 

实现一个栈的逆序,但是只能用递归函数和这个栈本身的pop操作来实现,而不能自己申请另外的数据结构。

给定一个整数数组A即为给定的栈,同时给定它的大小n,请返回逆序后的栈。

测试样例:
[4,3,2,1],4
返回:[1,2,3,4]
 
 
1
import java.util.*;
2

3
public class StackReverse {
4
    public int[] reverseStack(int[] A, int n) {
5
        Stack<Integer> stack = new Stack<>();
6
        for (int tmp : A) {
7
            stack.push(tmp);//stack[4,3,2,1]
8
        }
9

10
        Stack<Integer> reverseStack = reverseStack(stack);//reverseStack[1,2,3,4]
11
        for (int i = reverseStack.size()-1; i >-1 ; i--) {
12
            A[i] = reverseStack.pop();
13
        }
14
        return A;
15
    }
16

17
    // 翻转栈中的元素
18
    private Stack<Integer> reverseStack(Stack<Integer> stack) {
19
        // 移除栈底元素并返回
20
        int i = getLast(stack);
21
        if (stack.isEmpty()) {
22
            stack.push(i);
23
            return stack;
24
        } 
25
        else {
26
            reverseStack(stack);//继续下一层递归
27
            stack.push(i);//将这一层的元素压入栈
28
        }
29
        return stack;
30

31
    }
32

33
    // 移除栈底元素并返回
34
    public int getLast(Stack<Integer> stack) {
35
        // 弹出当前的元素
36
        int result = stack.pop();
37
        if (stack.isEmpty()) {
38
            return result;
39
        } 
40
        else {
41
            int last = getLast(stack);
42
            stack.push(result);
43
            return last;
44
        }
45
    }
46
}
 
 
您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例
 
 
posted on 2017-03-18 13:41  日月的弯刀  阅读(642)  评论(0编辑  收藏  举报