天天看點

輸入一個連結清單,從尾到頭列印連結清單每個節點的值輸入一個連結清單,從尾到頭列印連結清單每個節點值

輸入一個連結清單,從尾到頭列印連結清單每個節點值

從頭開始列印連結清單很簡單,建立一個節點讓其指向連結清單的頭節點,列印節點的數值,再去指向下一個節點,再列印節點值,直到節點為NULL。

那麼要是從尾到頭列印連結清單節點值,遵循“先進後出”的原則,是以這裡考慮用棧。

先一一周遊連結清單,周遊一個節點就将其壓入棧,直到所有節點都入棧,再取棧頂元素并列印節點的值,知道棧為空。

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        if(head==NULL)
        {
            return vector<int>();
        }
        vector<int> v;
        std::stack<ListNode*> s;
        ListNode* cur=head;
        //将節點入棧
        while(cur)
        {
            s.push(cur);
            cur=cur->next;
        }
        //從棧中取出節點,将節點的值依次壓入vector,并将節點pop
        while(!s.empty())
        {
            cur=s.top();
            v.push_back(cur->val);
            s.pop();
            cur=cur->next;
        }
        return v;
    }
};