5. 從尾到頭打印鏈表

題目描述

輸入一個鏈表的頭結點,從尾到頭反過來打印出每個結點的值。

解析

逆序打印鏈表,我們遍歷鏈表只能從頭到尾,現在要求我們從尾到頭。後進先出,可以想到用棧存儲遍歷的節點,然後打印出棧序列。
而遞歸的本質就是棧結構,在打印本節點之前,先打印本節點的下一個節點

實現

void PrintListReversingly_Iteratively(ListNode* pHead){
    //用棧存儲所有鏈表節點,然後出棧
    std::stack<ListNode*> s;
    //將所有鏈表節點入棧
    while(pHead!=NULL){
        s.push(pHead);
        pHead=pHead->m_pNext;
    }
    //打印輸出所有棧元素
    while(s.empty() == false){
        printf("%d\t",s.top()->m_nValue);
        s.pop();
    }
}
void PrintListReversingly_Recursively(ListNode* pHead){
    //判斷傳參有效性
    if(pHead == NULL)
        return;
    //遞歸方法,打印本節點前,先打印本節點的下一個節點
    if(pHead->m_pNext != NULL){
        PrintListReversingly_Recursively(pHead->m_pNext);
    }
    printf("%d\t",pHead->m_nValue);
}
發佈了115 篇原創文章 · 獲贊 9 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章