如何仅用递归函数和栈操作逆序一个栈

题目

将一个栈里面的元素逆序,只能用递归函数来实现,不能用其他数据结构。

要求

  1. 只能用递归函数来实现
  2. 可以使用现成的栈类型

思路

为了将栈逆序,只需要按顺序将栈顶至栈底的元素拿出并移除,放置到栈顶中,这样就可以将栈逆序。

代码

实现代码

import java.util.Stack;

/**
 * Created by wentian on 16/6/10.
 */
public class ReverseStack<T> {
    public Stack<T> reverseStack(Stack<T> stackData) {
        int size = stackData.size();
        T pushElement = null;
        for (int i = 0; i < size; i++) {
            pushElement = getAndPopBottomElement(stackData, i);
            stackData.push(pushElement);
        }

        return stackData;
    }

    public T getAndPopBottomElement(Stack<T> stackData, int index) {
        T bottom = stackData.pop();
        if (0 == index)
            return bottom;

        T result = getAndPopBottomElement(stackData, index - 1);
        stackData.push(bottom);
        return result;
    }
}

测试代码

import org.junit.Test;

import java.util.Stack;

import static org.junit.Assert.*;

/**
 * Created by wentian on 16/6/10.
 */
public class ReverseStackTest {
    @Test
    public void reverseStack() throws Exception {
        ReverseStack<Integer> reverseStack = new ReverseStack<Integer>();

        Stack<Integer> stackData = new Stack<Integer>();
        stackData.push(1);
        stackData.push(2);
        stackData.push(3);

        reverseStack.reverseStack(stackData);

        while(!stackData.empty()){
            System.out.println(stackData.pop());
        }
    }
}

在github中查看

posted @ 2016-07-26 09:32  小魂师  阅读(985)  评论(0编辑  收藏  举报