206 反转链表

在这里插入图片描述

解题思路可以有两种方法:递归 or 迭代。

\qquad 迭代:通过使用for循环遍历,完成目标。方法直观,容易理解。
\qquad 递归:通过函数调用其自身,完成目标。递归最复杂、最重要的部分就是递归函数的构建,构建递归函数可以从以下几方面考虑:
\qquad\qquad 1)函数的终止条件的设立。
\qquad\qquad 2)目标拆解后,函数每一步需要重复执行的操作。
\qquad\qquad 3)不同递归层级间的信息传递,可借助参数、返回值、外部变量等。

递归思路:
\qquad 一开始的思路,从刚才上面三个角度分析:
\qquad 1)当前head为最后一个节点时,返回head,作为翻转后链表的表头。
\qquad 2)每一步重复将当前head添加到新链表的末尾。
\qquad 3)观察可发现,完成每一步的操作需要两个信息:
\qquad\qquad 1 - 翻转后链表的表头,用于题目输出,只能作为递归函数的返回值传递。
\qquad\qquad 2 - 翻转后链表的末尾,用于重复将当前节点添加到链表末尾,被函数各层调用使用,一开始的思路是,是用全局变量去存储链表末尾,并在每次操作后不断更新。

优化思路:
\qquad 思路大致相同,但是能否优化无需使用全局变量来存储链表末尾?
\qquad 可以利用链表本身的特性,找到链表的末尾,如下所示:
\qquad\qquad 1 → \rightarrow 2 → \rightarrow 3 → \rightarrow 4 → \rightarrow 5 \qquad (原本的链表)
\qquad\qquad 1 → \rightarrow 2 → \rightarrow 3 ← \leftarrow 4 ← \leftarrow 5 \qquad (部分反转的链表)
\qquad 现在,函数递归到节点2,如何找到翻转链表的末尾?从图中可以很直观的理解:
\qquad end node = 2 -> next, 只需要将 2 -> next -> next = node 2,便可以将2翻转:
\qquad\qquad 1 → \rightarrow 2 ← \leftarrow 3 ← \leftarrow 4 ← \leftarrow 5 \qquad

\qquad 另外需要注意的点,由于每次操作是重复的,如果仅仅改变指针的指向会导致反转后的链表未能指向nullptr,因此在每一步操作中,需额外将反转链表末尾指向nullptr

class Solution {
public:ListNode* reverseList(ListNode* head) {if(head == nullptr || head->next == nullptr){return head;}ListNode* revhead = reverseList(head->next);head->next->next = head;head->next = nullptr;return revhead;}
}; 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】——栈|队列(基本功能)

目录 栈 基本概念 栈的常见基本操作 栈的存储 ✌栈的基本操作实现 栈的构建 栈的初始化 入栈 打印栈 出栈 获取栈顶元素 获取栈的有效元素个数 判断栈是否为空 销毁栈 队列 基本概念 队列的常见基本操作 ✌队列的基本操作实现 队列的构建 初始化 入队列 出…

Spring Security 6.x 系列(9)—— 基于过滤器链的源码分析(二)

一、前言 在本系列文章: Spring Security 6.x 系列(4)—— 基于过滤器链的源码分析(一)中着重分析了Spring Security在Spring Boot 的自动配置、 DefaultSecurityFilterChain 的构造流程、FilterChainProxy 的构造流…

假设检验(四)(非参数假设检验)

文章目录 分布假设检验参考文献 在有些实际问题中,无法预知总体服从何种分布,而希望根据样本来检验对总体分布所提出的假设,或者想通过样本来检验对总体之间的关系所提出的假设。这一类问题就是非参数假设检验问题。非参数假设检验包括分布假…

【重点】【前缀和】560. 和为 K 的子数组

题目 解法1&#xff1a;哈希表 class Solution {public int subarraySum(int[] nums, int k) {int[] sumArray new int[nums.length];Map<Integer, Integer> sumToCountMap new HashMap<>();for (int i 0; i < nums.length; i) {if (i 0) {sumArray[i] n…

详解原生Spring当中的事务

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…

基于Langchain的txt文本向量库搭建与检索

这里的源码主要来自于Langchain-ChatGLM中的向量库部分&#xff0c;做了一些代码上的修改和封装&#xff0c;以适用于基于问题和包含数据库表描述的txt文件&#xff08;文件名为库表名&#xff0c;文件内容为库表中的字段及描述&#xff09;对数据库表进行快速检索。 中文分词…

Android 14 CarAudioService

文章目录 新功能AudioMirringoemCarService 新功能 AudioMirring 简单的说就是两个bus输出的是同一个音频数据。 构建的流程是&#xff1a; 一个输入src的bus&#xff0c;和两个输出dst的bus。 通过setParamter 设置到hal。 hal解析这些参数&#xff0c;将输入bus 的音频数据…

Spring Security 6.x 系列(8)—— 源码分析之配置器SecurityConfigurer接口及其分支实现

一、前言 本章主要内容是关于配置器的接口架构设计&#xff0c;任意找一个配置器一直往上找&#xff0c;就会找到配置器的顶级接口&#xff1a;SecurityConfigurer。 查看SecurityConfigurer接口的实现类情况&#xff1a; 在 AbstractHttpConfigurer 抽象类的下面可以看到所有…

idea类和方法模版

类模版 修改目标位置 class #if (${PACKAGE_NAME} && ${PACKAGE_NAME} ! "")package ${PACKAGE_NAME};#end #parse("File Header.java")/*** ${Description}* author whc ${YEAR}/${MONTH}/${DAY}* version v1.0 */public class ${NAME} { }inte…

【网络安全】虚假IP地址攻击如何防范?

在当今的网络时代&#xff0c;虚假IP地址攻击已成为一种新型的网络攻击方式&#xff0c;给网络安全带来了极大的威胁。那么&#xff0c;什么是虚假IP地址攻击&#xff1f;又如何进行溯源和防范呢&#xff1f;本文将为您揭开这一神秘面纱。 一、虚假IP地址攻击概述 虚假IP地址攻…

[python]离线加载fetch_20newsgroups数据集

首先手动下载这个数据包 http://qwone.com/~jason/20Newsgroups/20news-bydate.tar.gz 下载这个文件后和脚本放一起就行&#xff0c;然后 打开twenty_newsgroups.py文件&#xff08;在fetch_20newsgroups函数名上&#xff0c;右键转到定义即可找到&#xff09; 之后运行代码即…

羊大师教你如何有效应对冬季流感,保护自己与家人

羊大师教你如何有效应对冬季流感&#xff0c;保护自己与家人 随着冬季的临近&#xff0c;流感病毒将再次蔓延。如何预防冬季流感来袭&#xff0c;成为了许多人关注的话题。幸运的是&#xff0c;我们可以采取一系列的预防措施来保护自己和家人&#xff0c;避免被流感侵袭。下面…

【Altium designer 20】

Altium designer 20 1. Altium designer 201.1 原理图库1.1.1 上划岗 在字母前面加\在加字母1.1.2 自定义快捷键1.1.3 对齐1.1.4 在原有的电路图中使用封装1.1.5 利用excel创建IC类元件库1.1.6 现有原理图库分类以及调用1.1.7 现有原理图库中自动生成原理图库 1.2 绘制原理图1.…

【初阶解法-数据结构】包含min函数的栈(代码+图示)

【数据结构】刷题-包含min函数的栈(代码图示)-初阶解法 文章目录 【数据结构】刷题-包含min函数的栈(代码图示)-初阶解法题目提炼题目要求分析题目总结思路代码时间/空间复杂度进阶版 题目 定义栈的数据结构&#xff0c;请在该类型中实现一个能够得到栈中所含最小元素的 min 函…

Ubuntu22.04 交叉编译mp4V2 for Rv1106

一、配置工具链环境 sudo vim ~/.bashrc在文件最后添加 export PATH$PATH:/opt/arm-rockchip830-linux-uclibcgnueabihf/bin 保存&#xff0c;重启机器 二、下载mp4v2 下载路径&#xff1a;MP4v2 | mp4v2 三、修改CMakeLists.txt 四、执行编译 mkdir build cd buildcmak…

羊大师教你如何在冬天运动,然后悄悄惊艳所有人

羊大师教你如何在冬天运动&#xff0c;然后悄悄惊艳所有人 寒冷的冬季&#xff0c;寂静的清晨&#xff0c;你是否也曾感到在冰冷的天气中进行锻炼是一件非常困难的事情&#xff1f;但是&#xff0c;现在请跟随小编羊大师一起来探索冬季秘密运动&#xff0c;让你在春节惊艳众人…

人工智能_机器学习060_核函数对应数学公式_数据空间错位分割_简单介绍_以及核函数总结---人工智能工作笔记0100

我们之前做的都是线性分类问题,那么需要一根线来分割类别,但是,如果出现了,环形数据,我们知道,在二维中我们就无法分割了,那么有没有什么办法分割呢? 实际上是有的,可以看到,我们可以把数据进行升维,可以看到,如果把数据升高到2维度以上,可以看到,神奇的一幕出现了,这个时候,因…

认知觉醒(三)

认知觉醒(三) 第二节 焦虑&#xff1a;焦虑的根源 焦虑肯定是你的老朋友了&#xff0c;它总像背景音乐一样伴随着你&#xff0c;我们虽对它极为熟悉&#xff0c;却从来不知道它究竟是谁。我也是默默忍受多年之后&#xff0c;终于在某天鼓足气力和它对视了一番&#xff0c;从…

【Linux】进程控制--进程创建/进程终止/进程等待/进程程序替换/简易shell实现

文章目录 一、进程创建1.fork函数2.fork函数返回值3.写时拷贝4.fork常规用法5.fork调用失败的原因 二、进程终止1.进程退出码2.进程退出场景3.进程常见退出方法 三、进程等待1.为什么要进行进程等待2.如何进行进程等待1.wait方法2.waitpid方法3.获取子进程status4.进程的阻塞等…

job_queue_processes参数讲解

原文地址&#xff1a;job_queue_processes参数讲解作者&#xff1a;rainbow_尧 本文转自【乐沙弥的世界】&#xff0c;在此感谢原作者&#xff01; Oracle jobs为Oracle开发人员和数据库管理员提供了数据库层面维护的极大便利性。对于Oracle jobs在Oracle 9i之前&#xff0c;是…