双指针实现链表反转

2023-11-02

题目:
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
代码实现:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution{
	public:
		ListNode* reverseList(ListNode* head){
			ListNode* cur = NULL, *pre = head;
			while(pre != NULL){
				ListNode* t = pre->next;
				pre->next = cur;
				cur = pre;
				pre = t;
			}
			return cur;
		}
}

代码分析:

  1. 定义两个指针:pre 和 cur;pre 在前,cur 在后;
  2. 每次让 pre 的 next 指向 cur ,实现一次局部反转;
  3. 局部反转完成之后, pre 和 cur 同时往前移动一个位置;
  4. 循环上述过程,直至 pre 到达链表尾部。

如果还不清楚呢,下面将结合代码图示每一步的操作:
初始情况下,cur 定义为空指针,pre 指向头结点 a,t 指向 pre 的 next 结点 b。
在这里插入图片描述
第一次循环
执行pre->next = cur;后,a 结点的 next 结点指向空指针。pre 和 cur 指针后移,分别指向 b 结点和 a 结点。
![在这里插入图片描述](https://img-blog.csdnimg.cn/6e37c45fe95b427ca8e9a00f

第二次循环
执行pre->next = cur;后,b 结点的 next 结点指向 a 结点。pre 和 cur 指针后移,分别指向 c 结点和 b 结点。
在这里插入图片描述
第三次循环
执行pre->next = cur;后,c 结点的 next 结点指向 b 结点。pre 和 cur 指针后移,分别指向 NULL 和 c 结点。在这里插入图片描述
至此,循环结束,cur指向反链表的头节点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

双指针实现链表反转 的相关文章

随机推荐

  • 实时CPU设计

    Patmos with Chisel https github com t crest patmos
  • Wireshark使用详解

    文章目录 wireshark简介 抓包原理 抓包 抓包窗口介绍 封包详细信息 Packet Details Pane 过滤信息介绍 显示过滤 抓包过滤 高级功能 数据流追踪 wireshark简介 wireshark是捕获机器上的某一块网卡
  • smart doc:自动生成接口文档拓展

    smart doc 作为一个接口文档生成工具 可以根据代码的java doc注释 生成接口文档 同时已经对接到Torna接口平台 鉴于大家用的接口平台五花八门 Torna的功能可能不符合大家的需求 研究下是否可以基于smart doc 拓展
  • 百度UE富文本编辑器设置自适应大小和滚动条等

    其实真特么简单 一开始还试着自己设置 弄来弄去都不合适 最后发现你想要的人家其实都有 你只需要设置就好了 后知后觉啊 你想要的效果可能在文件夹下config js里边都有 只需要在界面中实例化页面的那行代码里边设置就好了 代码如下 var
  • ubuntu下redis安装配置

    为什么80 的码农都做不了架构师 gt gt gt ubuntu下redis安装配置 一 redis介绍 redis是一个key value存储系统 与memcached类似 但是解决了断电后数据完全丢失的现象 支持数据类型有string
  • 数学-麦克劳林公式

    麦克劳林公式是泰勒公式 在 记 的一种特殊形式 在不需要余项的精确表达式时 n阶泰勒公式也可写成 由此得近似公式 误差估计式变为 在麦克劳林公式中 误差 R x 是当x 0时比x 高阶的无穷小 若函数f x 在开区间 a b 有直到n 1阶
  • DiffusionDet: Diffusion Model for Object Detection

    DiffusionDet Diffusion Model for Object Detection 论文概述 不同之处 整体流程 论文题目 DiffusionDet Diffusion Model for Object Detection
  • C#连接sql的两种方法

    数据库连接 方法1 using System using System Collections Generic using System Linq using System Text using System Threading Tasks
  • H - Nine Packs Kattis - ninepacks

    题目链接 题意就是在a数组中找出x个数 b数组中找出y个数 且x个数之和等于y个数之和 本想着用暴力的写法 但是出来之后不对 因为此题并不是连续的 还可以跳着取数 下面是WA的代码 include
  • 基于Web的网络在线考试系统

    基于Web的网络在线考试系统 一 系统简介 本系统是一种基于Web的网络在线考试系统 各个模块主要从JSP Servlet JDBC JavaBean四部分技术角度出发搭建框架 其中Servlet是运行在服务器端的程序 被Web服务器 To
  • YARN 状态机的原理和使用

    有了异步处理 为什么还需要状态机 可以保存对象当前的状态 当接收到一个事件后 可以根据不同的状态 可以方便的决定怎么处理 如接收到用户发送的KILL事件时 当Job的状态为正在初始化时 只要把启动的进程kill就可以 当Job的状态为正在运
  • 快手app sig3 42位、48位参数分析

    免责任声明 任何可操作性的内容与本文无关 文章内容仅供参考学习 如有侵权 损害贵公司利益 请联系作者 会立刻马上进行删除 在抓包的时候 会发现有几个非常重要的参数 sig 和 sig3 然后sig参数的计算逻辑大概就是对请求url 后面的参
  • 1:1病例对照匹配的Python实现步骤详解

    这周接到一个活 因为某个课题研究需要 须把脑卒中患者的名单和一份健康人 对照 名单按照 性别相同 乡镇地址相同 年龄相差3岁以内 作为匹配条件进行1 1的匹配 现将思考及实现的过程逐一记录并在此分享 希望能给大家有所借鉴与帮助 拿到这份数据
  • VM-基本功能

    VMware专题 介绍 VM 基本功能 一 VMware Tools基本特性 二 快照功能 三 Template技术介绍 1 用Template技术批量部署虚拟机 先创建自定义规范 2 部署虚拟机 四 创建虚拟机参数说明 五 虚拟机内存技术
  • [记录]GAN学习之路[持续更新]

    目录 一 原始GAN 二 WGAN GP 三 pix2pix 四 CycleGAN 一 原始GAN 通俗解释 GAN由生成器 Generator 和判别器 Discriminator 组成 生成器负责生成假的图片来骗过判别器 而判别器需要不
  • mesh 模拟加入噪音数据,并根据每个三角形集群的数量进行去噪处理(附open3d python 代码)

    本篇文章对三角网格模型进行分割和去噪处理 其中包括以下主要步骤 1 使用Open3D库中的 o3d io read triangle mesh 函数读取PLY格式的三角网格模型 2 生成小立方体作为噪声 并将其添加到原始的三角网格模型中 3
  • response.sendRedirect(url)中的url问题

    servlet实现跳转页面时 对于重定向response sendRedirect url 对于参数url 一直引用的是本地上的html而且使用的是绝对路径 但是这个不能实现重定向 后来了解到这个url应该是指向在任何服务器上的项目的url
  • 【Tensorflow2.0】7、全流程model.fit模型训练方法

    文章目录 第一种方法直接用keras的fit方法 以fashion mnist为例 配置超参数 选择指定显卡及自动调用显存 准备数据 使用tf data来准备训练集和测试集 准备模型定义 开始定义模型 用functional方法 打印模型结
  • SoapUI 5.2.1测试接口

    俗话说 好记性不如烂笔头 今天我们就来介绍下SopaUI如何测试接口 首先我们新建一个WebService public class WebService System Web Services WebService WebMethod p
  • 双指针实现链表反转

    题目 定义一个函数 输入一个链表的头节点 反转该链表并输出反转后链表的头节点 示例 输入 1 gt 2 gt 3 gt 4 gt 5 gt NULL 输出 5 gt 4 gt 3 gt 2 gt 1 gt NULL 代码实现 Definit