1. 程式人生 > 實用技巧 >演算法日記-逆序輸出一個棧

演算法日記-逆序輸出一個棧

演算法日記-逆序輸出一個棧


要求:不能使用除棧以外的其他資料結構

需要使用遞迴函式,一次返回一個棧中的最底部的元素,還需要一個遞迴函式呼叫這個方法,並將返回的最底部的函式放入到新的棧中。
遞迴返回棧中最底部的數
    /**
     * 返回並移除棧中最底部的元素
     * 先將棧中的最頂層的取出,然後遞迴呼叫該函式,
     * 在執行到棧中最後一個數據時將其return出去,
     * 如果不是最後一個數,就把它放入新的棧中,最後
     * 返回的是該棧中移除最後一個數據之外的棧。
     * @param stack
     * @return
     */
    public static int removeLast(Stack<Integer> stack){
        int result = stack.pop();
        if(stack.empty()){
            return result;
        }else {
            int last = removeLast(stack);
            stack.push(result);
            return last;
        }

    }
將上述返回的數字依次放入新的棧中
    /**
     * 遞迴呼叫上述的方法,將數字放入棧中
     * @param stack
     */
    public static void reverse(Stack<Integer> stack){
        if(stack.isEmpty()){
            return;
        }
        int i = getAndRemoveLastElement(stack);
        reverse(stack);
        stack.push(i);
    }