[リスト] --003尾のリストから安全オファープリントヘッドを証明

タイトル説明

ArrayListの頭に尾から順にリストを返すことによって、リストを入力します。

トピック分析

タイトルリストは、最初から最後までアクセスすなわち一方向のみ次のポインタは、提供されます。件名は「最後のアウト」の考え方に類似のArrayListのヘッドエンド側から順に返すように頼みました。

問題解決

通常のソリューション:スタック

メソッドを実装するにはC ++ STLスタックを使用します。主な手順

  1. スタックスタック定義されたノードの値に格納されたリストを横断します。
  2. アクセストップ要素、ベクトル変数に、スタック変数をスタック(C ++スタック内のpop()関数の戻り値が使用できません)。
  3. リターンベクトル変数。

コード

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        vector<int> v;
        stack<int> s;
        while(head != NULL){
            s.push(head->val);
            head = head->next;
        }
        while(!s.empty()){
            v.push_back(s.top());
            s.pop();
        }
        return v;
    }
};

再帰的なソリューション

ベクターは、出力を完了するために、「スタック」を使用して、システムをグローバル変数を定義しました。

コード

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> v;
    vector<int> printListFromTailToHead(ListNode* head) {
        if(head != NULL){
            printListFromTailToHead(head->next);
            v.push_back(head->val);
        }
        return v;
    }
};

暴力ソリューション:ピュアSTL

C ++ STL方法の提供の暴力を使用して解決するために

コード

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        vector<int> v;
        while(head != NULL){
            v.push_back(head->val);
            head = head->next;
        }
        vector<int>::reverse_iterator riter; //反向迭代器
        return vector<int>(v.rbegin(),v.rend());
    }
};

個人的な考えやウェブ大物皆、および補正と歓迎の議論の問題を組み合わせたソリューションのためのより多くのアイデア。

リリース3元の記事 ウォンの賞賛5 ビュー67

おすすめ

転載: blog.csdn.net/garlicup/article/details/105060190