其他分享
首页 > 其他分享> > “从尾到头打印链表”

“从尾到头打印链表”

作者:互联网

描述

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

如输入{1,2,3}的链表如下图:

返回一个数组为[3,2,1]

0 <= 链表长度 <= 10000

示例1

输入:{1,2,3}

返回值:[3,2,1]

示例2

输入:{67,0,24,58}

返回值:[58,24,0,67]

 

思路分析

解法一 直接遍历

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        vector<int> res;
        if(head == nullptr)
        {
            return res;
        }
        ListNode* cur = head;
        //从头结点开始遍历
        while(cur)
        {
            //将每个节点的值放入动态数组中
            res.push_back(cur->val);
            //指针向后移动
            cur = cur->next;
        }
        //反转整个数组
        reverse(res.begin(), res.end());
        return res;
    }
};

 

解法二 递归写法

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> ans;
    void dfs(ListNode* now){
        // 递归的出口为当前的指针为空的情况
        if(!now){
            return;
        }
        // 向后面进行递归
        dfs(now->next);
        // 递归之后收集权值
        ans.push_back(now->val);
    }
    vector<int> printListFromTailToHead(ListNode* head) {
        dfs(head);
        return ans;
    }
};

 

标签:结点,ListNode,到头,val,res,next,链表,从尾
来源: https://blog.csdn.net/yizhizainulii/article/details/121969659