zoukankan      html  css  js  c++  java
  • 剑指Offer:从尾到头打印链表

    剑指Offer:从尾到头打印链表
    问题描述:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)

    解题思路:

    1. 要求用数组(vector)返回,vector只能进行尾插法,无法实现逆序;
    2. 用容器deque,可进行头尾插入删除,遍历链表val值,全部通过头插法加入该容器;
    3. 再遍历deque容器(从头到尾已实现逆序),从头传入val值到vector当中,再弹出deque的头部val值。

    注意:

    1. 这样不可避免需要创建两个容器,并重复插入删除容器,时间消耗可能有点大。
    2. 有个比较好的reverse函数,能够成功将数组,字符串,容器等进行反转。具体代码看如下。
    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<int> reversePrint(ListNode* head) 
        {
            std::deque<int> d_data; //通过reverse函数,也可不用
            std::vector<int> arr;
            while(head != NULL)
            {
                d_data.push_front(head->val);
                head=head->next;
            }
            //for循环可省去
            for(auto i:d_data)
            {
                arr.push_back(d_data.front());
                d_data.pop_front();
            }
            //reverse(arr.begin(),arr.end());  //省去for循环,可节省很多时间和内存
            return arr;
        }
    };
    

    通过reverse函数,时间效率能提高很多。

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<int> reversePrint(ListNode* head) 
        {
            std::vector<int> arr;
            while(head != NULL)
            {
                arr.push_back(head->val);
                head=head->next;
            }
            reverse(arr.begin(),arr.end());  //省去for循环,可节省很多时间和内存
            return arr;
        }
    };
    
  • 相关阅读:
    xiaopiu产品原型设计与团队实时协作平台
    asp.net webform过滤器(注意我们可以在拦截请求的同时设置回调函数)
    wdScrollTab
    pageoffice实现网页打开编辑保存word文档(基于SSM框架)
    ESB企业服务总线
    JRebel for IntelliJ
    dtcms 手机浏览
    maven仓库添加jar架包
    shell脚本实现FTP自动上传文件
    mysql创建数据库指定字符集
  • 原文地址:https://www.cnblogs.com/Tavi/p/12514045.html
Copyright © 2011-2022 走看看