解決這個問題其實有很多種思路,例如:
第一種:使用遞迴配合回溯即刻實現。
第二種:利用棧的特性,將鍊錶迴圈遍歷放入棧中,棧頂是鍊錶的尾結點,然後出棧依次列印就可從尾到頭列印鍊錶。
第四種:把鍊錶中連線結點的指標反轉過來,改變鍊錶的方向,再從頭都尾列印即可。
解決方法很多種,我們在這裡給出第一二種的具體實現步驟。
struct listnode ;
struct linkstack ;
struct listnode * creatlistnode(int count)
return p;
}
第一種方式
void initstack (struct linkstack *s)
s->ptop = s->pbase;
s->stacksize = 100;
}void displaystack (struct listnode *phead,struct linkstack *links)
while (links->pbase != links->ptop)
}//第二種方式
void displayrecursion(struct listnode * phead)
struct listnode * p = phead->m_pnext;
displayrecursion(p);
printf("%d",phead->m_nvalue);
}int main(int argc, const char * argv)
return 0;
}
插入一下棧溢位的問題,值得思考:
inta = 10000000;
void test()
a--;
test();
}
劍指offer 5 從尾到頭列印單鏈表
從尾到頭列印單鏈表 ps 如果題設不要求不能改變鍊錶結構時,可以使用單鏈表的逆置 之前已經寫過 單鏈表的逆置改變了鍊錶的方向,嚴格要求時不能這樣寫。解1 遞迴求解 從尾到頭列印單鏈表 遞迴實現 解2 非遞迴實現 利用棧的特性 先進的後出 listnode printlist listnode phe...
劍指Offer 從尾到頭列印鍊錶
題目1511 從尾到頭列印鍊錶 時間限制 1 秒 記憶體限制 128 兆 特殊判題 否 提交 1082 解決 350 題目描述 輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。輸入 每個輸入檔案僅包含一組測試樣例。每一組測試案例包含多行,每行乙個大於0的整數,代表乙個鍊錶的節點。第一行是鍊錶第乙個節點的...
劍指offer 從尾到頭列印鍊錶
輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。輸入描述 輸入為鍊錶的表頭 輸出描述 輸出為需要列印的 新鍊錶 的表頭 分析 題目本意是用的棧結構的先入後出,但是有了容器類的高階方法之後,使用棧的意義就不大了。c struct listnode class solution listnode p hea...