【剑指offer--C/C++】JZ6 从尾到头打印链表

一、题目

这里是引用

二、本人思路及代码

直接在链表里进行翻转不太方便操作,但是数组就可以通过下标进行操作,于是,

思路1、

先遍历链表,以此存到vector中,然后再从后往前遍历这vector,存入到一个新的vector,就完成了翻转操作。

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        vector<int> a,ret;
        while(head){
           a.push_back(head->val);
           head=head->next;
        }

        for(int i=a.size()-1;i>=0;i--){
            ret.push_back(a[i]);
        }

        return ret;
    }
};

思路2、

先遍历链表,以此存到vector中,然后定义两个指针,分别从头部和尾部同时往中间遍历,并将相应的位置进行交换,直到两个指针相等或后面的指针小于前面的。例如{1,2,3,4,5} --> 1和5交换,2和4交换。

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        vector<int> a;
        while(head){
           a.push_back(head->val);
           head=head->next;
        }

       int i=0; 
       int j=a.size()-1;
       int k;
       for(;i<j; j--,i++){
          k=a[i];
          a[i]=a[j];
          a[j]=k;
       }
       return a;

    }
};

三、学习他人精华

在牛客上看到一个思路,觉得非常不错,记录一下。
解法采用递归来实现链表的反转. 其实递归和反转可以说是一对孪生兄弟, 递归在触底反弹之后, 执行的就是一个逆向的遍历过程.
在函数外部声明, 即把ret声明为Solution类的一个公有变量. 从而函数每次直接调用ret执行操作即可, 不需要在每一层递归都声明一个新的ret.

class Solution {
public:
    vector<int> ret;
    vector<int> printListFromTailToHead(ListNode* head) {
        if(!head) return ret;
        printListFromTailToHead(head->next);
        ret.push_back(head->val);
        return ret;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/437154.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OPC UA 学习笔记:状态机/有限状态机

有限状态机 有限状态机 &#xff08;FSM&#xff09; 是程序员、数学家、工程师和其他专业人士用来描述具有有限数量条件状态的系统的数学模型。 有限状态机的构成包括以下内容&#xff1a; 一组潜在的输入事件。与潜在输入事件相对应的一组可能的输出事件。系统可以显示的一…

dubbo3适配springboot2.7.3

版本详细 <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>3.0.3</version> </dependency><parent><groupId>org.springframework.boot</groupId><artifactId&…

13年测试老鸟,接口性能测试-压测总结汇总,一文概全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、概述 性能测试…

LVS负载均衡群集之NAT与DR模式

一 集群和分布式 企业群集应用概述 群集的含义 Cluster&#xff0c;集群、群集 由多台主机构成&#xff0c;但对外只表现为一个整体&#xff0c;只提供一个访问入口(域名或IP地址)&#xff0c;相当于一台大型计算机。 问题&#xff1f; 互联网应用中&#xff0c;随着站点对…

leetCode刷题 4.寻找两个正序数组的中位数

目录 1. 思路 2. 解题方法 3. 复杂度 4. Code 题目&#xff1a; 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例 1&#xff1a; 输入&…

重磅!云智慧推出轻量智能化服务管理平台轻帆云

近日&#xff0c;云智慧推出智能服务管理平台轻帆云&#xff0c;通过构建服务体系、规范服务流程、保障服务质量、提升服务效能&#xff0c;为企业提供安全可靠的一站式服务管理解决方案。SaaS轻量化部署方式&#xff0c;仅需通过简单操作&#xff0c;即可轻松完成搭建&#xf…

Java EE之线程安全问题

一.啥是线程安全问题 有些代码&#xff0c;在单个线程执行时完全正确&#xff0c;但同样的代码让多个线程同时执行&#xff0c;就会出现bug。例如以下代码&#xff1a; 给定一个变量count&#xff0c;让线程t1 t2分别自增5000次&#xff0c;然后进行打印&#xff0c;按理说co…

libftdi库编译

目录 1. 下载源码 2. Ubuntu下编译 2.1 配置编译环境 2.2 编译 3. Android NDK下编译 3.1 编译libconfuse 3.2 编译libusb 3.3 编译libudev 3.3 编译libftdi 分2部分&#xff0c;先在Ubuntu中编译&#xff0c;然后在Android NDK中编译。 1. 下载源码 下载地址&#…

企业财务分析该怎么做?重点分析哪些财务指标?

在企业经营管理的过程中&#xff0c;财务分析是评估当前企业或特定部门财务状况和绩效的过程&#xff0c;这一过程通常涉及对财务报表&#xff08;如资产负债表、利润表和现金流量表&#xff09;进行定量和定性的评估&#xff0c;以便为盈利能力、偿债能力、现金流动性和资金稳…

VMware虚拟机安装Linux教程(超详细)

目录 一、安装VMware VMware下载&#xff08;16 pro&#xff09;&#xff1a; 镜像文件&#xff08;不一定选择CentOS&#xff0c;只是为了有图形界面更好的操作)​ 安装VMware 安装虚拟机 第一步&#xff1a;点击创建新的虚拟机。​ 第二步&#xff1a;选择自定义 &…

HTML结构及常见标签

1.HTML结构 认识 HTML 标签 HTML 代码是由 " 标签 " 构成的 . 形如 : <body> hello </body> <body id "myId" > hello </body> 标签名 (body) 放到 < > 中 大部分标签成对出现 . <body> 为开始标签 , …

ant-desgin charts双轴图DualAxes,柱状图无法立即显示,并且只有在调整页面大小(放大或缩小)后才开始显示

摘要 双轴图表中&#xff0c;柱状图无法立即显示&#xff0c;并且只有在调整页面大小&#xff08;放大或缩小&#xff09;后才开始显示 官方示例代码 在直接复制&#xff0c;替换为个人数据时&#xff0c;出现柱状图无法显示问题 const config {data: [data, data],xFiel…

Kubernetes-3

Kubernetes学习第3天 Kubernetes-31、查看实时的cpu和内存消耗1.1、kubectl top node 2、卷的使用2.1、什么是卷&#xff1f;1. 解决数据持久性问题2. Kubernetes 中的卷抽象概念3. 共享数据示例4. Kubernetes 中的卷使用5. 不同类型的卷6. 灵活、可靠的数据管理 2.2、联想到do…

CVE-2024-27198 JetBrains TeamCity 身份验证绕过漏洞分析

漏洞简介 JetBrains TeamCity 是一款由 JetBrains 公司开发的持续集成和持续交付服务器。它提供了强大的功能和工具&#xff0c;旨在帮助开发团队构建、测试和部署他们的软件项目 JetBrains TeamCity发布新版本修复了两个高危漏洞JetBrains TeamCity 身份验证绕过漏洞(CVE-20…

玩转安卓之配置gradle-8.2.1

概述&#xff1a;看了一下&#xff0c;由于gradle是国外的&#xff0c;所以下载速度很慢&#xff0c;这个老师又是很菜的类型&#xff0c;同学又不会&#xff0c;于是曹某就写这一篇文章&#xff0c;教大家学会简单的为安卓配置gradle-8.2.1。 第一步&#xff1a;下载gradle-8…

VScode插件

开发环境准备 VSCodeNodejs官方推荐使用的脚手架工具 Yeoman 和 Generator-code插件打包和发布工具 vsce 脚手架使用 1、安装 npm install -g yo generator-code2、使用脚手架 3、执行 Inside the editor, open src/extension.ts and pressF5. This will compile and run …

顺序表以及单链表

目录 1顺序表&#xff08;规范&#xff09; 2单链表&#xff08;规范&#xff09; 3总结 1顺序表&#xff08;规范&#xff09; #include<iostream> using namespace std; #define MAXSIZE 100 #define ok -1 #define error -2 typedef int Status; typedef int…

C++(12)——模板初阶

模板初阶 泛型编程 在日常敲代码过程中&#xff0c;我们难免需要用到交换数据的情况 我们就需要写Swap函数来进行数据的交换。虽然我们可以用函数重载实现交换不同数据类型的Swap函数&#xff0c;但是还是有一些不太方便的地方&#xff1a; 1 重载的函数仅仅是类型不同。代码…

AttributeError: ‘ChatGLMTokenizer‘ object has no attribute ‘sp_tokenizer‘

目录 问题描述 在使用ChatGLMlora微调的时候&#xff0c;报错“AttributeError: ChatGLMTokenizer object has no attribute sp_tokenizer“ ​编辑问题解决&#xff1a; 问题描述 在使用ChatGLMlora微调的时候&#xff0c;报错“AttributeError: ChatGLMTokenizer object h…

一篇就够!产品经理必知的软件工具盘点

无论是初入职场的新人还是正在考虑转向产品经理领域的人&#xff0c;了解并熟练使用一些关键的软件工具对于成功地执行产品管理任务至关重要。在这篇文章中&#xff0c;我们将深入介绍一些产品经理常用的软件工具&#xff0c;涵盖项目管理、团队协作、原型设计以及数据分析等多…