剑指offer:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。

问题描述:

输入一个链表,按链表从尾到头的顺序返回一个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 容器浅析

(理解尚浅,如有不妥,欢迎指正)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值