如何僅用遞歸函數和棧操作逆序一個棧

題目

將一個棧里面的元素逆序,只能用遞歸函數來實現,不能用其他數據結構。

要求

  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中查看

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容