当前位置: 首页 > news >正文

【算法】链表:92.反转链表(medium)+双指针

 系列专栏

《分治》

《模拟》

《Linux》


目录

1、题目链接 

2、题目介绍

3、解法 (双指针)

4、代码


是 206. 反转链表 - 力扣(LeetCode)的类型题,且难度提升,可以先完成206,然后参照206的思路,解决本题。

1、题目链接 

 92. 反转链表 II - 力扣(LeetCode)

2、题目介绍

3、解法 (双指针)

  1. 创建虚拟节点
    • 为了简化边界情况的处理,尤其是当left为1时,即需要翻转的链表部分从头节点开始,此时我们难以直接操作头节点。因此,我们创建一个虚拟节点dummy,其next指向原链表的头节点head。这样,我们总可以操作dummy->next而无需担心修改原始头节点。
  2. 定位left位置的前一个节点
    • 我们需要遍历链表直到left-1的位置,以便找到left位置节点的前一个节点。这个节点在后续翻转过程中将作为新链表的尾部节点(因为它后面接的是需要翻转的部分),并且在翻转完成后,它将指向翻转后部分的新头节点。
    • 变量cur用于遍历链表,直到它指向left位置的前一个节点。
    • 终止位置是left-1。
  3. 准备翻转
    • pre指向left位置的节点,这是翻转部分的起始节点。
    • lLEFT存储left位置前一个节点的引用,这样在翻转后,我们可以将其与翻转后的链表部分重新链接。
  4. 执行翻转
    • 我们需要翻转从leftright的节点。
    • 使用三个指针pre(当前节点的前一个节点),pre->next(当前节点),和tmp(当前节点的下一个节点)。
    • 翻转操作通过改变节点间的next指针来实现:将当前节点的next指向它的前一个节点pre,然后移动precur指针到下一个节点。
    • 循环继续直到cur到达right位置的节点。此时,pre指向right位置的下一个节点,而cur指向right位置的节点。
  5. 重新链接
    • 翻转完成后,我们需要将翻转后的部分与链表的其他部分重新链接。
    • lLEFT->next->next指向right位置之后的节点(即pre),这是因为lLEFT->next现在是翻转部分的新头节点(原right位置的节点),而我们需要将它的next指向翻转部分之后的节点。
    • lLEFT->next指向翻转部分的新头节点(即原right位置的节点,现在的cur)。
  6. 返回结果
    • 虚拟节点dummynext指向原始链表的头节点或翻转后的新头节点(如果翻转从头部开始)。因此,返回dummy->next即可得到最终翻转后的链表。

4、代码

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/class Solution {
public:ListNode* reverseBetween(ListNode* head, int left, int right) {ListNode* dummy = new ListNode(0);//虚拟结点dummy->next = head;ListNode* cur= dummy;//找到left位置的前一个结点for (int i = 0; i < left - 1; i++){cur = cur->next;}ListNode* pre = cur->next;ListNode* lLEFT= cur;//用来存储left位置的前一个结点//翻转区域//保存头尾结点,方便之后和其他区域链接for (int i = left - 1; i < right; i++){ListNode* tmp = pre->next;pre->next = cur;cur = pre;//cur最后会是right对应的结点pre = tmp;//PRE最后会是right的下一个结点}//链接翻转区域lLEFT->next->next = pre;lLEFT->next = cur;return dummy->next;}
};

💗感谢阅读!💗


相关文章:

【算法】链表:92.反转链表(medium)+双指针

系列专栏 《分治》 《模拟》 《Linux》 目录 1、题目链接 2、题目介绍 3、解法 &#xff08;双指针&#xff09; 4、代码 是 206. 反转链表 - 力扣&#xff08;LeetCode&#xff09;的类型题&#xff0c;且难度提升&#xff0c;可以先完成206&#xff0c;然后参照206的…...

Command | Ubuntu 个别实用命令记录(新建用户、查看网速等)

1. 实用命令 1.1 系统相关 1.1.1 查看系统、用户信息等 查看当前系统硬件架构 uname -m注&#xff1a;mac 上也能用 查看当前系统的操作系统及版本 cat /etc/os-release | grep "PRETTY_NAME"查看当前系统单个cpu的可用核心数 cat /proc/cpuinfo | grep "…...

云服务器部署k8s需要什么配置?

云服务器部署k8s需要什么配置&#xff1f;云服务器部署K8s需要至少2核CPU、4GB内存、50GBSSD存储的主节点用于管理集群&#xff0c;工作节点建议至少2核CPU、2GB内存、20GBSSD。还需安装Docker&#xff0c;选择兼容的Kubernetes版本&#xff0c;配置网络插件&#xff0c;以及确…...

Linux --入门学习笔记

文章目录 Linux概述基础篇Linux 的安装教程 ⇒ 太简单了&#xff0c;百度一搜一大堆。此处略……Linux 的目录结构常用的连接 linux 的开源软件vi 和 vim 编辑器Linux 的关机、开机、重启用户登录和注销用户管理添加用户 ⇒ ( useradd 用户名 ) &#xff08; useradd -d 制定目…...

并发编程三大特性(原子性、可见性、有序性)

并发编程的三大特性实际是JVM规范要求的JVM实现必须保证的三大特性 不同的硬件和不同的操作系统在内存管理上有一定的差异&#xff0c;JAVA为了解决这种差异&#xff0c;使用JMM&#xff08;Java Memry Model&#xff09;来屏蔽各个操作系统之间的差异&#xff0c;使得java可以…...

物理学基础精解【41】

文章目录 核物理基础 Υ \varUpsilon Υ衰变1. Υ \varUpsilon Υ衰变的一般性质2. 具体的衰变模式3. 衰变公式和机制4. 实验观测和理论研究 Υ \varUpsilon Υ衰变概述一、定义二、公式三、定理一、定义二、公式三、定理 重带电粒子概述重带电粒子的性质重带电粒子的公式 重带…...

深入理解Linux内核网络(一):内核接收数据包的过程

在应用层执行read调用后就能很方便地接收到来自网络的另一端发送过来的数据&#xff0c;其实在这一行代码下隐藏着非常多的内核组件细节工作。在本节中&#xff0c;将详细讲解数据包如何从内核到应用层&#xff0c;以intel igb网卡为例。 部分内容来源于 《深入理解Linux网络》…...

mysql学习教程,从入门到精通,SQL LIKE 运算符(28)

1、SQL LIKE 运算符 在SQL中&#xff0c;LIKE运算符主要用于在WHERE子句中搜索列中的指定模式。它通常与通配符一起使用&#xff0c;如%&#xff08;代表零个、一个或多个字符&#xff09;和_&#xff08;代表单个字符&#xff09;&#xff0c;以执行模糊匹配。下面是一个使用…...

uniapp微信小程序使用ucharts遮挡自定义tabbar的最佳解决方案

如图所示&#xff1a; 使用的ucharts遮挡住了我自定义的tabbar&#xff08;如果不是提需求的有病&#xff0c;我才不会去自定义tabbar&#xff09; 查阅了不少文档&#xff0c;说是开启 ucharts 的 canvas2d 即可&#xff1a; 官网文档地址&#xff1a; uCharts官网 - 秋云…...

C初阶(八)选择结构(分支结构)--if、else、switch

前言&#xff1a; C语言是用来解决问题的&#xff0c;除了必要的数据输入与输出&#xff08;见前文&#xff09;&#xff0c;还要有逻辑结构。其中基本可以归为三类&#xff1a;顺序结构、选择结构、循环结构。今天&#xff0c;杰哥提笔写的是关于选择结构&#xff08;又叫“分…...

基于Springboot vue应急物资供应管理系统设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php python(flask Django) 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找…...

区块链+Web3学习笔记

学习资料来源于B站&#xff1a; 17小时最全Web3教程&#xff1a;ERC20&#xff0c;NFT&#xff0c;Hardhat&#xff0c;CCIP跨链_哔哩哔哩_bilibili 该课程提供的Github代码地址&#xff0c;相关资料详见README.md&#xff1a; Web3_tutorial_Chinese/README.md at main sm…...

Redis: 集群高可用之节点与插槽管理

概述 Redis Cluster 集群模式&#xff0c;它使用的是分片来存储数据的&#xff0c;数据都存在多个节点上。而且使用了哈希槽这样的机制&#xff0c;它内部维护了 16384 个插槽那就是说每一个节点其实都具体的分布了一些槽&#xff0c;如果我们添加一个节点的话&#xff0c;槽总…...

HUAWEI New4.9G 与 2.6G 无法正常切换问题处理案例

HUAWEI New4.9G 与 2.6G 无法正常切换问题处理案例 在某地市的 XX 音乐节保障准备期间&#xff0c;为确保活动期间的网络质量&#xff0c;现场新开了 4.9G HUAWEI 室外基站。在网络优化和测试中&#xff0c;发现UE无法实现从 2.6G 到 4.9G 的正常切换。虽然现场具备 4.9G信号覆…...

Qt C++设计模式->责任链模式

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许多个对象有机会处理请求&#xff0c;而不需要明确指定哪个对象处理。通过将这些对象连成一条链&#xff0c;请求沿着链传递&#xff0c;直到有对象处理它为止。该模式…...

paypal支付v2.0(php)支付代码

第一步&#xff1a;获取access_token: <?php$clientId ; // 替换为你的 PayPal Client ID $clientSecret ; // 替换为你的 PayPal Client Secret// PayPal API 请求的 URL $url "https://api-m.sandbox.paypal.com/v1/oauth2/token";// 初始化 cURL $ch …...

基于Python的自然语言处理系列(23):DrQA

在本篇文章中,我们将实现 DrQA 模型,该模型最初由论文 Reading Wikipedia to Answer Open-Domain Questions 提出。DrQA 是一种用于开放域问答系统的端到端解决方案,最初包括信息检索模块和深度学习模型。本次实现中,我们主要探讨 DrQA 的深度学习模型部分。 1. 数据加载 …...

誉天Linux云计算课程学什么?为什么保障就业?

一个IT工程师相当于干了哪些职业? 其中置顶回答生动而形象地描绘道&#xff1a; 一个IT工程师宛如一个超级多面手&#xff0c;相当于——加班狂程序员测试工程师实施工程师网络工程师电工装卸工搬运工超人。 此中酸甜苦辣咸&#xff0c;相信很多小伙伴们都深有体会。除了典…...

无人机控制和飞行、路径规划技术分析

无人机控制和飞行、路径规划技术是现代无人机技术的核心组成部分&#xff0c;它们共同决定了无人机的性能和应用范围。以下是对这些技术的详细分析&#xff1a; 一、无人机控制技术 无人机控制技术主要涉及飞行控制系统的设计、传感器数据的处理以及指令的发送与执行。飞行控…...

【C++】模拟实现红黑树

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:实战项目集 ⚙️操作环境:Visual Studio 2022 目录 一.了解项目功能 二.逐步实现项目功能模块及其逻辑详解 &#x1f4cc;实现RBTreeNode类模板 &#x1f38f;构造RBTreeNode类成员变量 &#x1f38f;实现RBTreeNode类构…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...