【左神算法】實現一個棧的逆序,但是隻能用遞歸函數的這個棧本身的操作來實現,而不能用自己申請另外的數據結構

1.題目描述

實現一個棧的逆序,但是隻能用遞歸函數的這個棧本身的操作來實現,而不能用自己申請另外的數據結構

2.思路&code

思路

1.棧的逆序,如果不借助任何的數據結構,我們只能依靠遞歸函數來實現。而這個思路也是不容易想到的。首先,我們需要一個get()函數,每次返回棧底的元素,並在棧中移除。遞歸函數是一個系統調用棧實現。因此很容易實現。第二個函數,reverse函數,將棧中的元素進行逆序。

code

package com.ncst.algo;

import java.util.Stack;

/**
 * @author i
 * @create 2020/6/29 19:25
 * @Description 實現一個棧的逆序,但是隻能用遞歸函數的這個棧本身的操作來實現,而不能用自己申請另外的數據結構
 *
 *   3 2 1  1 2 3
 */
public class StackResve {

    //移除棧底元素並返回。
    public static int get(Stack<Integer> stack){
        int result = stack.pop();//
        if(stack.isEmpty()){
            return result;
        }else {
            int last = get(stack);
            stack.push(result);
            return last;
        }
    }

    //將棧中元素逆序的方法
    public static void reverse(Stack<Integer> stack){
        if (stack.isEmpty()){
            return;
        }
        int i = get(stack);
        reverse(stack);
        stack.push(i);
    }


    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(3);
        stack.push(2);
        stack.push(1);

        reverse(stack);

        while (!stack.isEmpty()){
            System.out.print(stack.pop()+"\t");
        }
    }


}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章