2、打印链表
题目描述
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
知识点
:
链表
解题思路
将链表读出来放在ArrayList,这里使用的是vector 容器对象。要使按链表值从尾到头的顺序返回,根据vector的特性,可使用一个vector,也可使用两个。
1、使用两个vector: 1)将链表中值顺序读到一个vector中,2)再逆序写到另一个vector中。
2、使用一个vector:将链表中的值顺序读出,并将其逆序写到vector中。
代码块
1、使用两个vector,例如:
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> list;
vector<int> newlist;
ListNode* current = head;
//1)顺序写入
while(current != NULL){
list.push_back(current->val);
//list.insert(list.begin(),current->val);
current = current->next;
}
//2)逆序插入
for(int i = list.size()-1; i>=0; i--){
newlist.push_back(list[i]);
}
//list.pop_back();
return newlist;
}
};
... prompt'''
2、使用一个vector,例如:
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> list;
ListNode* current = head;
//list.push_back(0);
while(current != NULL){
//list.push_back(current->val);
list.insert(list.begin(),current->val);
current = current->next;
}
//list.pop_back();
return list;
}
};
注
如果是用的不是vector 容器对象,可能没有办法直接完成逆向插入的过程。第一种方法的适用性更好,对各种数据类型都通用。但在了解使用的数据类型的前提下,可以使用更简便的方法。