从尾到头打印单链表
題目:從尾到頭打印鏈表。輸入一個單鏈表的頭結點,從尾到頭反過來打印出每個結點的值。鏈表結點定義如下:
struct?ListNode{int?m_nValue;ListNode*?m_pNext; };分析:考慮棧操作的類似性,可以建立堆棧然后輸出。實現代碼如下:
既然想到用堆棧,就可以想到遞歸在本質上也是堆棧結構,于是我們可以用遞歸來實現。要實現反過來輸出鏈表,我們每訪問到一個節點的時候,先遞歸輸出她后面的結點,在輸出該節點自身就可以了。實現代碼如下:
void?PrintListReversingly_Recursively(ListNode*?pHead){if(pHead!=NULL){if(pHead->m_pNext!=NULL){PrintListReversingly_Recursingly(pHead->m_pNext);}printf("%d\t",pHead->m_nValue);} }遞歸的方法有個問題:當鏈表非常長時,就會導致函數調用的層級很深,從而有可能導致函數調用的棧溢出。顯式的棧基于循環實現的代碼的魯棒性要好一些。
轉載于:https://blog.51cto.com/secondscript/1581618
總結
- 上一篇: 正则表达式支持情况
- 下一篇: redis维护问题总结