尾のリストから003プリントヘッド
タイトル説明
ArrayListの頭に尾から順にリストを返すことによって、リストを入力します。
トピック分析
タイトルリストは、最初から最後までアクセスすなわち一方向のみ次のポインタは、提供されます。件名は「最後のアウト」の考え方に類似のArrayListのヘッドエンド側から順に返すように頼みました。
問題解決
通常のソリューション:スタック
メソッドを実装するにはC ++ STLスタックを使用します。主な手順
- スタックスタック定義されたノードの値に格納されたリストを横断します。
- アクセストップ要素、ベクトル変数に、スタック変数をスタック(C ++スタック内の
pop()
関数の戻り値が使用できません)。 - リターンベクトル変数。
コード
/**
* 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());
}
};
個人的な考えやウェブ大物皆、および補正と歓迎の議論の問題を組み合わせたソリューションのためのより多くのアイデア。