從尾到頭打印鏈表

題目描述

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

棧實現

要解決這個問題,肯定要遍歷鏈表,從頭到尾遍歷鏈表,從尾到頭輸出值,典型的“后進先出”,自然可以想到用棧來解決。

struct ListNode {
      int val;
      struct ListNode *next;
      ListNode(int x) :
            val(x), next(NULL) {
      }
};
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        vector<int> vals;
        stack<ListNode*> nodes;
        
        ListNode* pNode=head;
        while(pNode!=NULL){
            nodes.push(pNode);
            pNode=pNode->next;
        }
        while(!nodes.empty()){
            pNode=nodes.top();
            vals.push_back(pNode->val);
            nodes.pop();
        }
        return vals;    
    }
};
遞歸實現

遞歸本質上是一個棧結構,要實現反過來輸出鏈表,可以每訪問到一個節點的時候,先遞歸輸出它后面的節點,再輸出節點本身。

class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        
        vector<int> vals;
        PrintListReversing(head,vals);
        return vals;    
    }
    
    void PrintListReversing(ListNode *pNode, vector<int> &vals){
        if(pNode!=NULL){
            if(pNode->next!=NULL)
                PrintListReversing(pNode->next,vals);
            vals.push_back(pNode->val);
        }
            
    }
        
};
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容