剑指 Offer 06. 从尾到头打印链表

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。

 

示例 1:

输入:head = [1,3,2]
输出:[2,3,1]

复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> v;
    void dg(ListNode* ptr)
    {
        if(ptr->next!=nullptr)
        {
            dg(ptr->next);
            v.push_back(ptr->val);
        }
        else
        {
            v.push_back(ptr->val);
            return;
        }

    }

    vector<int> reversePrint(ListNode* head) {
        if(head!=nullptr)
            dg(head);
        return v;
    }
};

/*
        vector<int> v;
        while(head!=NULL)
        {
            v.push_back(head->val);
            head=head->next;
        }
        vector<int> rv(v.rbegin(),v.rend());
*/
复制代码

两个思路,一是正常遍历,然后翻转数组;

二是使用递归,回溯时再向数组加数;

一更优,递归消耗的空间应该大于复制数组所占的空间。

posted @   简直可啪  阅读(8)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示