从尾到头打印链表
题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
笔记:
C++中空用大写NULL(区别python的None),结构体初始化的方式:
struct node{
int val;
node *next;
node(int x):
val(x),next(NULL){}
};
创建链表:
ListNode *test = new ListNode(1);
test->next = new ListNode(2);
test->next->next = new ListNode(3);
思路:①vector有insert(value, index)这个函数,可以插入头insert(value,0)
②常规方法用栈
#include<iostream>
#include<vector>
using namespace std;
struct ListNode{
int val;
struct ListNode *next;
ListNode(int x):
val(x),next(NULL){}
};
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> res;
while(head != NULL){
res.insert(res.begin(), head->val);
head = head->next;
}
return res;
}
};
int main(){
Solution s;
ListNode *test = new ListNode(1);
test->next = new ListNode(2);
test->next->next = new ListNode(3);
vector<int> r = s.printListFromTailToHead(test);
for(int i=0;i<r.size();i++)
cout<<r[i]<<" ";
return 0;
}
常规方法
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
struct ListNode{
int val;
struct ListNode *next;
ListNode(int x):
val(x),next(NULL){}
};
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> res;
stack<int> ss;
while(head != NULL){
ss.push(head->val);
head = head->next;
}
while(!ss.empty()){
int top = ss.top();
ss.pop();
res.push_back(top) ;
}
return res;
}
};
int main(){
Solution s;
ListNode *test = new ListNode(1);
test->next = new ListNode(2);
test->next->next = new ListNode(3);
vector<int> r = s.printListFromTailToHead(test);
for(int i=0;i<r.size();i++)
cout<<r[i]<<" ";
return 0;
}