问题描述:
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
解题思路:
链表结构体如下:
struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
由这个结构体我们得知,这是单链表,只有next域,没有pre域。
由链表属性得知,只能从头至尾的访问该链表。
所以,使用两个向量(vector),一个盛放从头至尾访问的数据,另一个盛放从尾到头的数据
注:
关于vector,我找到的资料如下:
一、什么是vector?
向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。
二、容器特性
1.顺序序列
顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。
2.动态数组
支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算述进行该操作。提供了在序列末尾相对快速地添加/删除元素的操作。
3.能够感知内存分配器的(Allocator-aware)
容器使用一个内存分配器对象来动态地处理它的存储需求。
此题用到的函数:push_back(),size()
1.push_back 在数组的最后添加一个数据
2.size 当前使用数据的大小
c++代码如下
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> alist,blist; //使用两个向量
ListNode* p=NULL;
p=head;
while(p){ //当p结点存在,循环进行
alist.push_back(p->val); //将链表值添加到alist数组的最后一个
p=p->next;//p指向下一个
}
int l=alist.size(); //l是alist里的元素个数
for(int i=0;i<alist.size();i++){ //将alist的数据从后向前添加到blist数组里
blist.push_back(alist[l-1]);
l--;
}
return blist;
}
};
资料参考:C++ vector 容器浅析
(理解尚浅,如有不妥,欢迎指正)