[劍指offer][03]從尾到頭打印鏈表

題目描述:

· 輸入一個鏈表,從尾到頭打印鏈表每個節點的值。

解題思路:
思路1:

第一反應是將鏈表中的指針反轉,改變鏈表的方向,然后再從頭打印出來(該方法改變了原來鏈表的結構,這就要看面試或筆試時的要求,可否改變鏈表結構)

思路2:

遍歷鏈表時是從頭到尾,而打印鏈表時卻是從尾到頭,典型的“先進后出”——棧的特點,從而可以用棧來實現。每遍歷一個節點,把該節點放到一個棧中,當遍歷完整個鏈表后,再從棧頂開始逐個輸出節點的值,此時輸出的節點順序已經反轉過來了。

思路3:

棧可以實現,而遞歸本質上也是一個棧結構,從而可以用遞歸來實現。即:沒遍歷到一個節點時,先遞歸輸出其后面的一個節點的值,再輸出該節點本身的值。

代碼實現
思路1:
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        ListNode *pNext, *pTemp;
        vector<int> res;
        //邊界檢查
        if (head == nullptr)
            return res;
        //處理頭指針
        pNext = head->next;
        pTemp = head;
        head->next = nullptr;
        //單鏈表逆序
        while (pNext != nullptr){
            pTemp = pNext;
            pNext = pNext->next;
            pTemp->next = head;
            head = pTemp;
        }
        //逆序打印
        while (head != nullptr){
            res.push_back(head->val);
            head = head->next;
        }
        return res;
    }
};
思路2:
思路3:
參考鏈接

面試題8:從尾到頭打印單鏈表

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 前言 2. 實現 Singleton 3. 數組中重復的數字 4. 二維數組中的查找 5. 替換空格 6. 從尾到...
    Observer_____閱讀 3,000評論 0 1
  • 鏈表 記錄《劍指offer》中所有關于鏈表的題目,以及LeetCode中的相似題目 相關題目列表 題目 鏈表是面試...
    wenmingxing閱讀 1,183評論 0 11
  • 【聲明】歡迎轉載,但請保留文章原始出處→_→文章來源:http://www.lxweimin.com/p/08d08...
    夢工廠閱讀 3,788評論 3 31
  • 代碼GitHub地址 鏈表概述 數組和鏈表都是線性存儲結構的基礎實現,棧和隊列都是線性存儲結構的應用 數組優缺點 ...
    HikariCP閱讀 1,470評論 0 0
  • 回想著以前的時光,不知不覺已經過了兩年了,說我們沒有變,我們卻變了很多,但真要看看哪里變了卻找不出來。從一開始我...
    愛笑的女孩閱讀 552評論 0 0