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

題目:

一個棧依次壓入 1送矩、2蚕甥、3、4栋荸、5菇怀,那么從棧頂?shù)綏5追謩e為5、4蒸其、3、2库快、1.將這個棧轉(zhuǎn)置后摸袁,從棧頂?shù)綏5椎?、2义屏、3靠汁、4、5闽铐,也就是實現(xiàn)棧中元素的逆序蝶怔。

要求:

只能使用遞歸函數(shù),不能使用其他數(shù)據(jù)結(jié)構(gòu)

思路:

我們需要設(shè)計兩個遞歸方法
遞歸函數(shù)一:用來把棧底元素返回并移除

getAndRemoveLastElement()方法的示意圖.png

遞歸函數(shù)二:也就是題目要求寫的遞歸函數(shù)兄墅,逆序一個棧
reverse()方法的示意圖.png

代碼演示

package com.itz.zcy.stackAndQueue;

import java.util.Stack;

/**
 * 一個棧依次壓入 1踢星、2、3隙咸、4沐悦、5,那么從棧頂?shù)綏5追謩e為5五督、4藏否、3、2充包、1.將這個棧轉(zhuǎn)置后副签,
 * 從棧頂?shù)綏5椎?、2基矮、3缘薛、4严肪、5,也就是實現(xiàn)棧中元素的逆序。
 * 只能使用遞歸函數(shù)立润,不能使用其他數(shù)據(jù)結(jié)構(gòu)
 */
public class ReverseStack {

    private static Stack<Integer> stack = new Stack<>();

    public static void main(String[] args) {
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        stack.push(5);
        reverse(stack);
        for (int i=0;i<5;i++){
            System.out.println(stack.pop());
        }
    }

    /**
     * 該方法返回棧底元素并移除
     *
     * @param stack 要查找的棧
     * @return 返回的棧底元素
     */
    private static int getAndRemoveLastElement(Stack<Integer> stack) {
        int result = stack.pop();
        if (stack.isEmpty()) {
            return result;
        } else {
            int last = getAndRemoveLastElement(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);
    }
}

總結(jié)

該方法實現(xiàn)較為簡單,使用遞歸對空間和時間就是一個考驗

文獻:左程云著 《程序員代碼面試指南IT名企算法與數(shù)據(jù)結(jié)構(gòu)題目最優(yōu)解》(第二版)
版權(quán)聲明:此文版權(quán)歸作者所有矢沿!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市青团,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌咖楣,老刑警劉巖督笆,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異诱贿,居然都是意外死亡娃肿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門珠十,熙熙樓的掌柜王于貴愁眉苦臉地迎上來料扰,“玉大人,你說我怎么就攤上這事焙蹭∩硅荆” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵孔厉,是天一觀的道長拯钻。 經(jīng)常有香客問我,道長撰豺,這世上最難降的妖魔是什么粪般? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮污桦,結(jié)果婚禮上亩歹,老公的妹妹穿的比我還像新娘。我一直安慰自己凡橱,他們只是感情好捆憎,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著梭纹,像睡著了一般躲惰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上变抽,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天础拨,我揣著相機與錄音,去河邊找鬼绍载。 笑死诡宗,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的击儡。 我是一名探鬼主播塔沃,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼阳谍!你這毒婦竟也來了蛀柴?” 一聲冷哼從身側(cè)響起螃概,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鸽疾,沒想到半個月后吊洼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡制肮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年冒窍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豺鼻。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡综液,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出儒飒,到底是詐尸還是另有隱情谬莹,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布约素,位于F島的核電站届良,受9級特大地震影響笆凌,放射性物質(zhì)發(fā)生泄漏圣猎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一乞而、第九天 我趴在偏房一處隱蔽的房頂上張望送悔。 院中可真熱鬧,春花似錦爪模、人聲如沸欠啤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洁段。三九已至,卻和暖如春共郭,著一層夾襖步出監(jiān)牢的瞬間祠丝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工除嘹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留写半,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓尉咕,卻偏偏與公主長得像叠蝇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子年缎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容