《剑指offer》——从尾到头打印链表
首先,拿到题之后,我们还是先从题目入手,只有掌握题干的意思,才能进行接下来的解题操作。

示例1
输入 : {1,2,3}
返回值:[3,2,1]
示例2
输入 :{67,0,24,58}
返回值:[58,24,0,67]
解题方法
a)直接遍历法
b)递归思想
c)栈思想
题目解析:
- 首先,拿到这个题,读过题之后我们会发现题意很简单,就是让我们针对链表中的元素,把它从尾到头输出即可。接下来,我提供给大家三种解题思路。
a)直接遍历法
💨思路:
- 我们先开辟一个数组,紧接着我们可以直接对这个链表进行从头节点开始的遍历操作。
- 记录下这个链表中的每个节点的值,把相应的值放入我们建立的数组之中。
- 最后遍历完毕在反转一下整个数组,返回即可。
代码如下:
class Solution {
public:vector<int> printListFromTailToHead(ListNode* head) {vector<int>arr; //开辟的数组用来存放链表中的值while(head){arr.push_back(head->val); //进行遍历操作,把元素插入数组head=head->next;}reverse(arr.begin(),arr.end());//最后反转数组即可return arr;}
};
性能分析:
- 时间复杂度:因为需要直接遍历长度为n的链表的所有的结点,所以时间复杂度为O(n)
- 空间复杂度:因为我们开辟了一个链表大小数组的用来存放链表结点中的值,因此空间复杂度为O(n)
b)递归思想
首先解答一下什么是递归:
- 首先,绝大多数问题都可以划分成更小的问题,通过求解这些小问题,将结果合并在一起得到原本问题的答案,其实递归的本质就是函数调用而已。因此,接下来的关键就是通过题意查看是否可以拆分为一个个的子问题。

💨思路:
- 首先,我们应该明白一点知识点,那就是我们对于链表来说,我们是不能直接通过遍历链表就得到题目所要求的从尾向头输出链表中的结点值。
- 所以我们可以对遍历的结点进行一个递归,我们先递归到这个链表的最后面,然后不断向前收集查看结点的权值。
代码如下:
//递归思想
void recursion(ListNode* head,vector<int>&arr)
{if(head != NULL){recursion(head->next,arr); //如果当前指针不为空,则一直往后进行递归操作arr.push_back(head->val); //遇到尾节点后开始返回,每次返回依次添加一个值进入输出数组}
}class Solution {
public:vector<int> printListFromTailToHead(ListNode* head) {vector<int>arr; //还是跟之前一样,开辟一个数组用来存放链表中结点的值recursion(head,arr); //递归调用去进行查看return arr;}
};
性能分析:
- 时间复杂度:因为需要直接遍历长度为n的链表的所有的结点,所以时间复杂度为O(n)
- 空间复杂度:因为我们开辟了一个链表大小的组用来存放链表中结点的值,因此空间复杂度为O(n)
c)栈思想
首先认识一下栈
首先,站的基本思想就是先进后出,如果对栈不了解的,可以参考这篇文章 栈的实现 ,它的基本思想满足本题中对链表进行从尾到头输出的条件。

💨思路:
- 我们可以从头结点开始顺序遍历整个链表,遍历的过程中将链表结点的值依次push到栈中
- 遍历完之后,再依次弹出栈中的元素,加入到数组中
- 最后返回数组,即可实现本题所要求的逆序输出
代码如下:
//栈思想class Solution {
public:vector<int> printListFromTailToHead(ListNode* head) {vector<int>arr; //还是跟之前一样,开辟一个数组用来存放链表中结点的值stack<int> str; //定义的栈while(head != NULL){str.push(head->val); //首先遍历链表,把其中结点的权值全部压入栈中head=head->next;}while(!str.empty()){//因为要求用数组返回把栈中的所有元素全部尾插到数组中arr.push_back(str.top());//弹出栈中的元素,即表示逆序输出的结果str.pop(); }//最后返回数组的内容return arr;}
};
性能分析:
- 时间复杂度:不仅需要直接遍历长度为n的链表的所有的结点,其次弹出栈的所有元素又需要O(n),所以时间复杂度为O(n)
- 空间复杂度:因为我们开辟了一个链表大小的数组用来存放链表中结点的值,其次栈空间最大长度是链表的长度n,因此空间复杂度为O(n)
到此,关于本题的讲解便全部结束!!!
相关文章:
《剑指offer》——从尾到头打印链表
首先,拿到题之后,我们还是先从题目入手,只有掌握题干的意思,才能进行接下来的解题操作。 示例1 输入 : {1,2,3} 返回值:[3,2,1] 示例2 输入 :{67,0,24,58} 返回值:[58,24,0,67] 解题方法…...
Javaweb基础配置模板(mybatis+javaweb)
1.大纲规划图 本配置涉及的技术:mybatis,javaweb,json转换,分页查询等 2.导入相关的配置文件pom.xml 2.1 依赖文件 <dependencies> <!-- 测试依赖--><dependency><groupId>junit</groupId><artifactId>junit</artifact…...
物联网 JS 前端框架开发 - 执行 js 程序
前言 此篇文章主要讲解如何在物联网操作系统OneOS上运行高级语言JS脚本程序。想想还是有点意思的,毕竟在IOT设备上,我们的固有想法是,他们性能很羸弱,可能就跑跑一些简单的C应用程序,没想到已经可以运行高级语言JS脚本…...
区块链概论
目录 1.概述 2.密码学原理 2.1.hash函数 2.2.签名 3.数据结构 3.1.区块结构 3.2.hash pointer 3.3.merkle tree 3.3.1.概述 3.3.2.证明数据存在 3.3.3.证明数据不存在 4.比特币的共识协议 4.1.概述 4.2.验证有效性 4.2.1.验证交易有效性 4.2.2.验证节点有效性 …...
MAC地址表安全
4.1.2MAC地址表安全 MAC地址表项类型包括:动态MAC地址表项:由接口通过报文中的源MAC地址学习获得,表项可老化。在系统复位、接口板热插拔或接口板复位后,动态表项会丢失。静态MAC地址表项:由用户手工配置并下发到各接口板,表项不老化。在系统复位、接口板热插拔或接口板复…...
处理CSV(python)
处理CSV(python)简介1. CSV和Python简介2. 文章内容简介一、用csv模块读取和写入CSV文件1. CSV模块2. 示例二、用pandas库读取和写入CSV文件1. pandas2. 示例三、处理CSV文件中的特殊情况1. 特殊情况及处理方法2. 示例简介 1. CSV和Python简介 CSV是一…...
【云原生】Kubernetes(k8s)之容器的探测
Kubernetes(k8s)之容器的探测一、探测类型及使用场景1.1、startupProbe(启动探测)1.2、readinessProbe(就绪探测)1.3、livenessProbe(存活探测)二、检查机制三、探测结果四、容器探测…...
看完这个你就牛了,自动化测试框架设计
一、引言 随着IT技术的快速发展,软件开发变得越来越快速和复杂化。在这种背景下,传统的手工测试方式已经无法满足测试需求,而自动化测试随之而生。 自动化测试可以提高测试效率和测试质量,减少重复性的测试工作,从而…...
Spring Cloud Alibaba全家桶(八)——Sentinel规则持久化
前言 本文小新为大家带来 Sentinel规则持久化 相关知识,具体内容包括,Sentinel规则推送三种模式介绍,包括:原始模式,拉模式,推模式,并对基于Nacos配置中心控制台实现推送进行详尽介绍~ 不积跬步…...
Mysql不锁表备份之Xtrabackup的备份与恢复
一、Xtrabackup介绍 MySQL冷备、热备、mysqldump都无法实现对数据库进行增量备份。如果数据量较大我们每天进行完整备份不仅耗时且影响性能。而Percona-Xtrabackup就是为了实现增量备份用于MySQL数据库物理热备的备份工具,xtrabakackup有2个工具,分别是x…...
flex布局:输入框布局demo
目标效果 首先,生成输入框: 代码: 结果: 设置基本样式 包括:去除边距、设置父盒子的宽度(如果不设置宽度,会使用整个浏览器的宽度)、添加父盒子边框等 代码: *{margin: 0;pad…...
PHP请求的好处,PHP如何请求淘宝开放接口
PHP的好处有很多,最主要的特性就是PHP的安全性和兼容性明显。 1、良好的安全性 PHP是开源软件,所有PHP的源代码每个人都可以看得到,同时它与Apache编绎在一起的方式也可以让它具有灵活的安全设定, PHP具有了公认的安全性能。开源…...
精选出来的几道Java语法基础面试题
1.成员变量与局部变量的区别有那些? 从语法形式上,看成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public,private,static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所修饰;成员变量和局部…...
uniapp或者小程序图片选择中的sizeType属性到底是什么
sizeType属性到底是什么 https://developers.weixin.qq.com/community/develop/doc/0006c261a300089771f9a233a56c00 https://ask.dcloud.net.cn/question/146679 第一个链接来自微信小程序社区,有开发者提了个问题:sizeType: ["original", &q…...
判断一个字符串是否是回文
目录 判断一个字符串是否是回文 程序设计 程序分析 判断一个字符串是否是回文 【问题描述】编写一个程序,判断一个字符串是否为"回文"(顺读和倒读都一样的字符串称为"回文")。 【输入形式】长度小于100的任意字符串 【输出形式】如果输入字符串是回…...
国产软件爆发!中国版Navicat,SQL Studio成数据库管理工具热门
如果关注2023年的A股市场,会发现各行各业都掀起了“国产化替代”运动的热潮。不仅仅是芯片,新能源、医疗器械甚至软件等领域,也都加快了国产化进程。 长期以来,中国的软件业比较依赖国际巨头。比如操作系统以微软为主,…...
算法学习day51
算法学习day511.力扣309.最佳买卖股票时机含冷冻期1.1 题目描述1.2分析1.3 代码2.力扣714.买卖股票的最佳时机含手续费2.1 题目描述2.2 分析2.3 代码3.参考资料1.力扣309.最佳买卖股票时机含冷冻期 1.1 题目描述 题目描述 给定一个整数数组,其中第i个元素代表了第…...
10 JS01——初识JS
目标: 1、初识JavaScript 2、JavaScript注释 3、JavaScript输入输出语句 一、初识JavaScript 1、JavaScript是什么 JavaScript是世界上最流行的语言之一,是一种运行在客户端的脚本语言(Script是脚本的意思) 脚本语言:不需要编译,运行过程…...
【软考备考-综合知识】安全性、可靠性与系统性能评测基础知识
计算机的安全性 安全等级 计算机系统中的三类安全性是指技术安全性、管理安全性和政策法律安全性。 信息安全五要素 机密性:全包信息不暴露给未授权的实体或进程。 完整性:只有得到允许的人才能够修改数据,并能够判别出数据是否已被篡改。…...
匆忙之间难免疏忽,写代码更加如此
一个方法包含了多个知识点的合计,合计起来用。实战开发特点1; 基础知识点不牢固,您必定就会感觉寸步难行啊 public class AddJiChuShu{int a 1;int b 2;int c 0;int d 0;string str "";string str2 "张三";//mothe…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
