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

news/2024/11/14 13:35:57/

🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。
🚁 个人主页:不 良
🔥 系列专栏:🛸剑指 Offer  
📕 学习格言:博观而约取,厚积而薄发
🌹 欢迎进来的小伙伴,如果小伙伴们在学习的过程中,发现有需要纠正的地方,烦请指正,希望能够与诸君一同成长! 🌹


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

题目:

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

示例:

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

限制:

0 <= 链表长度 <= 10000

思路一:

使用reverse函数完成链表的逆序打印。我们通过遍历将链表中的值插入数组中,然后使用reverse完成数组元素的翻转,对数组元素翻转之后打印出的数组元素顺序即是链表从尾到头打印的顺序。

代码如下:

class Solution {
public:vector<int> reversePrint(ListNode* head) {vector<int> v;ListNode* cur = head;while(cur){v.push_back(cur->val);cur = cur->next;}//reverse函数的时间复杂度为O(N)reverse(v.begin(),v.end());return v;}
};

时间复杂度:O(N)

空间复杂度:O(N)

思路二:

我们可以通过修改链表中next指针的指向,先将链表反转,假设原链表为1->2->3->4->5->nullptr,反转后为5->4->3->2->1->nullptr;然后我们再申请一个数组,通过遍历新链表中的值放入数组中,此时数组中的值就已经是原链表中从尾到头的值。

链表的反转过程如下:

image-20230528171603278

代码如下:

class Solution {
public:vector<int> reversePrint(ListNode* head) {vector<int> v;ListNode* cur = head; //当前节点ListNode* prev = nullptr;//前一个节点//链表的反转while(cur){ListNode* tmp = cur->next;cur->next = prev;prev = cur;cur = tmp;}//此时prev就是链表的头节点cur = prev;//再从新链表的头节点开始遍历插入数组中while(cur){v.push_back(cur->val);cur = cur->next;}return v;}
};

时间复杂度:O(N)

空间复杂度:O(N)

思路三:

根据栈的先进后出的特性,使用栈完成链表的逆序打印。先遍历链表将链表中的值压入栈中,然后再通过top函数和pop函数将栈中的数据依次放入数组中,即可完成链表的逆序打印。

代码如下:

class Solution {
public:vector<int> reversePrint(ListNode* head) {vector<int> v;stack<int> st;ListNode* cur = head;//将链表中的值压入栈中while(cur){st.push(cur->val);cur = cur->next;}//将栈中的值依次放入数组中while(!st.empty()){v.push_back(st.top());st.pop();}return v;}
};

时间复杂度:O(N)

空间复杂度:O(N)


http://www.ppmy.cn/news/101124.html

相关文章

前端技术搭建贪吃蛇小游戏(内含源码)

The sand accumulates to form a pagoda ✨ 写在前面✨ 功能介绍✨ 页面搭建✨ 样式设置✨ 逻辑部分 ✨ 写在前面 上周我们实通过前端基础实现了井字游戏&#xff0c;今天还是继续按照我们原定的节奏来带领大家完成一个贪吃蛇游戏&#xff0c;功能也比较简单简单&#xff0c;也…

ChatGPT 与我合力开发 xargin blog archive 插件:曹大博客的新奇探险

之前写的批量删除 chatGPT 对话的插件[1]&#xff0c;最近我收到了一个五星好评&#xff1a; 虽然不赚钱&#xff0c;交个朋友嘛&#xff0c;还是挺高兴的。而且借助 chatGPT&#xff0c;我是在与全世界的用户交流&#xff0c;想想就激动。 最近我发现自己让 chatGPT 帮忙写前端…

【JavaSE】Java基础语法(二十八):HashSet集合

文章目录 1. HashSet集合概述和特点2. HashSet集合的基本应用3. 哈希值4. HashSet集合存储学生对象并遍历【应用】 1. HashSet集合概述和特点 底层数据结构是哈希表存取无序不可以存储重复元素没有索引,不能使用普通for循环遍历 2. HashSet集合的基本应用 存储字符串并遍历 …

linux系统使用HTTP代理方法

在Linux系统中使用HTTP代理方法&#xff0c;可以通过设置环境变量来实现。具体步骤如下&#xff1a; 1. 打开终端&#xff0c;输入以下命令&#xff1a; export http_proxyhttp://代理服务器IP地址:端口号 其中&#xff0c;代理服务器IP地址和端口号需要替换成你所使用的代理…

84.Rem和max-width如何工作

max-width 首先我们先看普通的width是什么样的效果&#xff01; 首先给个测试的div <div class"test">TEST</div>● 然后CSS给定一个宽度 .test {width: 1000px;background-color: red;padding: 100px; }如上图&#xff0c;不管你的浏览器窗口如何改变…

【优化调度】基于改进遗传算法的公交车调度排班优化的研究与实现(Matlab代码实现)

目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 1 概述 本文对当前公交企业调度系统进行了分析&#xff0c;建立了公交排班的数学模型。本文基于数据挖掘分析的结果上&#xff0c;使用截面客流量数据对模型进行约束&#xff0c;得出了公交客流出行的空间分布规律。再以…

分享几封好用的外贸人催单模版

给外贸人说在前面&#xff1a; 虽然说是催单模版&#xff0c;但是请带入你们公司产品&#xff0c;你们客户具体情况来套入&#xff0c;不能一模一样&#xff0c;再好的模版&#xff0c;再好的话术&#xff0c;大家一起用&#xff0c;就成了毫无价值的废料。 请灵活运用&#…

c# cad 二次开发 类库 块的操作

c# cad 二次开发 类库 块的操作 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.Runtime; using System; using System.Collections.G…