之前寫過一個棧模擬遞歸
那個題是不讓用遞歸(話說我有次筆試也是不讓用遞歸)
簡單的介紹一下,遞歸本質(zhì)是一個棧結(jié)構(gòu),不斷的調(diào)用自身。
而棧的大小是有限的,所以如果遞歸的層數(shù)太多,可能會棧溢出。
好了題目是這樣的:
逆序輸出一個單向鏈表
首先,用幾個游標(biāo)是不能達(dá)到效果的;當(dāng)然也可以先逆轉(zhuǎn)鏈表的方向。。這樣略復(fù)雜,并且會改變現(xiàn)有的鏈表,或者使用額外內(nèi)存。
也可以用一個棧,push進去再pop,這樣也會占用內(nèi)存。
(不過也是不錯的)
那還有一種方法呢,就是用遞歸,和樹一樣,后序輸出就行了;
后序輸出就是,在遞歸調(diào)用完了,執(zhí)行后面的語句的時候,打印出來。
其實這就很像一個棧的功能了。
代碼:
void reversePrint(listNode* l)
{
if(!l)
return;
if(l->next)
{
reversePrint(l->next);
}
std::cout<<l->data;
}
文章參考何海濤大神文章