演算法學習記錄三(C++)--->從尾到頭列印連結串列每個節點的值

Deft_MKJing宓珂璟發表於2017-07-31

描述

  • 輸入一個連結串列,從尾到頭列印連結串列每個節點的值。

思路

對於這種顛倒順序的問題,我們應該就會想到棧,後進先出。所以,這一題要麼自己使用棧,要麼讓系統使用棧,也就是遞迴。注意連結串列為空的情況。時間複雜度為O(n

示例一 展示每個節點的逆序列印 (棧–>C)

// 從尾到頭列印連結串列,使用棧  
void RPrintList(ListNode * pHead)  
{  
    std::stack<ListNode *> s;  
    ListNode * pNode = pHead;  
    while(pNode != NULL)  
    {  
        s.push(pNode);  
        pNode = pNode->m_pNext;  
    }  
    while(!s.empty())  
    {  
        pNode = s.top();  
        printf("%d\t", pNode->m_nKey);  
        s.pop();  
    }  
}

示例一 展示每個節點的逆序列印 (遞迴–>C)

// 從尾到頭列印連結串列,使用遞迴  
void RPrintList(ListNode * pHead)  
{  
    if(pHead == NULL)  
    {  
        return;  
    }  
    else  
    {  
        RPrintList(pHead->m_pNext);  
        printf("%d\t", pHead->m_nKey);  
    }  
} 

示例二 本題用棧實現(C++)

/*
  struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
              val(x), next(NULL) {
        }
  };
*/

// 棧的方式
/*
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        // 初始化棧
        stack<int>temp;
        vector<int>res;
        // 往棧裡面push
        while(head){
            // 入棧
            temp.push(head->val);
            head = head->next;
        }
        // 從棧裡面進行取出資料 push_back可以理解為OC裡面的addObject
        while(temp.size()){
            // 每次都是從棧頂拿資料
            res.push_back(temp.top());
            // 出棧
            temp.pop();
        }
        return res;

    }
};
*/

示例二 本題用遞迴實現(C++)

// 遞迴方法一
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        if(head == NULL)return{};
        if(head->next == NULL) return {head->val};
        vector<int>res = printListFromTailToHead(head->next);
        res.push_back(head->val);
        return res;


    }
};
*/


// 遞迴方法二
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        vector<int>res;
        if(head != NULL){
            res = printListFromTailToHead(head->next);
            res.push_back(head->val);
        }
        return res;

    }
};

相關文章