《剑指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…...
win11部署suna
参考链接 项目链接 沙盒链接 数据库链接 本文介绍 本文只为项目的辅助,手把手太麻烦 执行步骤 1.下载代码 git clone https://github.com/kortix-ai/suna.git cd suna2.配置环境(在Anaconda Prompt上执行) python setup.py3.运行代码 …...
uni-app学习笔记三十--request网络请求传参
request用于发起网络请求。 OBJECT 参数说明 参数名类型必填默认值说明平台差异说明urlString是开发者服务器接口地址dataObject/String/ArrayBuffer否请求的参数App 3.3.7 以下不支持 ArrayBuffer 类型headerObject否设置请求的 header,header 中不能设置 Refere…...

Git 使用大全:从入门到精通
Git 是目前最流行的分布式版本控制系统,被广泛应用于软件开发中。本文将全面介绍 Git 的各种功能和使用方法,包含大量代码示例和实践建议。 文章目录 Git 基础概念版本控制系统Git 的特点Git 的三个区域Git 文件状态 Git 安装与配置安装 GitLinuxmacOSWi…...
如何处理React中表单的双向数据绑定?
在前端开发中,双向数据绑定(Two-way Data Binding)是指视图(View)与数据模型(Model)之间保持同步:当模型发生变化时,视图会自动更新;当视图(用户输…...

springboot启动mapper找不到方法对应的xml
数据源配置 目录结构 idea中mapper.java 可以找到对应的mapper.xml文件 启动却找不到 因为mapper.db1会被识别为文件名 而非目录结构 调整为这种...

Spring Cloud Alibaba Seata安装+微服务实战
目录 介绍核心功能三层核心架构安装微服务实战创建三个业务数据库编写库存和账户两个Feign接口订单微服务 seata-order-service9701库存微服务 seata-store-service9702账户微服务 seata-account-service9703测试结果 总结 介绍 Spring Cloud Alibaba Seata 是一款开源的分布式…...

git引用概念(git reference,git ref)(简化对复杂SHA-1哈希值的管理)(分支引用、标签引用、HEAD引用、远程引用、特殊引用)
文章目录 **引用的本质**1. **引用是文件**2. **引用的简化作用** **引用的类型**1. **分支引用(Branch References)**2. **标签引用(Tag References)**3. **HEAD 引用**4. **远程引用(Remote References)*…...
Java编程中常见的条件链与继承陷阱
格式错误的if-else条件链 典型结构与常见错误模式 在Java编程中,if-else条件链是一种常见的多条件处理模式,其标准结构如下: if (condition1) {// 处理逻辑1 } else if (condition2) {// 处理逻辑2 } else...

《校园生活平台从 0 到 1 的搭建》第一篇:创建项目与构建目录结构
在本系列第一篇中,我们将从项目初始化开始,搭建基本的目录结构,并完成四个主页面的创建与 TabBar 设置。 (tip:你可能会觉得有点 ai 化,因为这个文案是我自己写了一遍文案之后让 ai 去优化输出的࿰…...

Unity使用代码分析Roslyn Analyzers
一、创建项目(注意这里不要选netstandard2.1会有报错) 二、NuGet上安装Microsoft.CodeAnalysis.CSharp 三、实现[Partial]特性标注的类,结构体,record必须要partial关键字修饰 需要继承DiagnosticAnalyzer 注意一定要加特性Diagn…...