每日一练(3):从尾到头打印链表

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

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


示例 1:


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

输出:[2,3,1]


限制:


0 <= 链表长度 <= 10000


来源:力扣(LeetCode)


链接:https://leetcode-cn.com/probl...


方法一:遍历反转


算法流程:


  • 先遍历一遍获取链表大小
  • 重新遍历,将数据insert到arr容器里


/**
 * 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) {
        int len = 0;
        ListNode *node = head;
        while (node != NULL) {
            len++;     //得到数据的长度
            node = node->next;
        }
         vector<int> arr;
         ListNode *p = head;
        for (int i = 0; i < len; i++) {
            arr.insert(arr.begin(), p->val);     //insert倒插
            p = p->next;
        }
        return arr;
    }
};


方法二:使用栈先进后出


算法流程:


  • 入栈: 遍历链表,将各节点值 push 入栈。
  • 出栈: 将各节点值 pop 出栈,存储于数组并返回。


复杂度分析:


  • 时间复杂度 O(N): 入栈和出栈共使用 O(N) 时间。
  • 空间复杂度 O(N): 辅助栈 stack 和数组 res 共使用 O(N)的额外空间。


/**
 * 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) {
        stack<int> s;
        vector<int> res;
        ListNode *p = head;
        while(p != NULL)
        {
            s.push(p->val); //节点数据依次入栈
            p = p->next;
        }
        while(!s.empty()) //遍历栈
        {
            res.push_back(s.top()); //反转
            s.pop();
        }
        return res;
    }
};


目录
相关文章
|
5月前
|
Go
Go语言每日一练链表篇(一)
Go语言每日一练链表篇(一)
|
6月前
|
存储 Java C语言
剑指offer(牛客)——从尾到头打印链表
剑指offer(牛客)——从尾到头打印链表
41 1
|
6月前
【一刷《剑指Offer》】面试题 5:从尾到头打印链表
【一刷《剑指Offer》】面试题 5:从尾到头打印链表
|
6月前
剑指Offer06.从尾到头打印链表
剑指Offer06.从尾到头打印链表
40 0
|
6月前
|
Rust 索引
Rust 编程小技巧摘选(6)
Rust 编程小技巧摘选(6)
82 1
Rust 编程小技巧摘选(6)
|
6月前
《剑指offer》——从尾到头打印链表
《剑指offer》——从尾到头打印链表
|
6月前
|
Shell Linux 算法
Shell编程——弱数据类型的脚本语言快速入门指南
Shell编程——弱数据类型的脚本语言快速入门指南
93 0
Shell编程——弱数据类型的脚本语言快速入门指南
|
6月前
|
Go Python Rust
Rust 编程小技巧摘选(7)
Rust 编程小技巧摘选(7)
97 0
Rust 编程小技巧摘选(7)
|
6月前
|
Python Linux Ubuntu
Linux系统部署Python语言开发运行环境
Linux系统部署Python语言开发运行环境
220 0
Linux系统部署Python语言开发运行环境
|
6月前
|
Go Unix 开发者
Go语言time库,时间和日期相关的操作方法
Go语言time库,时间和日期相关的操作方法
101 0
Go语言time库,时间和日期相关的操作方法