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;
        }
    };
    
  • 相关阅读:
    C# 基本数据类型
    java二进制,原码、反码、补码、位运算
    .net邮件发送[c#]
    linux软件安装命令
    VB.net实现从ListView控件中异地获取文本内容源代码
    VB获得进程PID
    任意组合指令达到免杀
    免杀之等价替换法
    ASP技巧base64编码、解码函数
    看到一个思路新颖的下载者制作法
  • 原文地址:https://www.cnblogs.com/Tavi/p/12514045.html
Copyright © 2011-2022 走看看