【刷题笔记】牛客网:链表指定区间内反转

news2025/1/16 17:55:55

【刷题笔记】牛客网:链表指定区间内反转

一、题目描述及示例

在这里插入图片描述

二、思路分析

1、首先,我们来定义一个虚拟的头节点tempHead(原因:如果从第一个位置开始反转,则可以不用进行特殊情况考虑),并使tempHead的next指向head
2、然后,我们定义两个ListNode型变量用来存储位置m的前一个节点和位置n的后一个节点,分别用pre和end表示;
创建mNode和nNode用来记录切割后链表的头和尾节点
3、遍历寻找到m的前一个节点的位置,并使用pre表示及m位置的节点,并使用mNode表示
4、遍历寻找到位置n的节点使用nNode表示及n的下一个节点,并使用end表示
5、对指定位置的链表进行切割
6、对切割后的链表进行反转
7、对反转后的链表进行拼接
8、最后,返回的是tempHead.next

三、代码实现如下

public ListNode ReverseBetween(ListNode head, int m, int n) {
        //1、首先,我们来定义一个虚拟的头节点(原因:如果从第一个位置开始反转,则可以不用进行特殊情况考虑)
        ListNode tempHead = new ListNode(-1);
        tempHead.next = head;
        //注意:此时tempHead是新的头节点(不能动它!!!),所以我们需要创建一个新的节点p,这样循环的时候我们就移动p即可
        ListNode p = tempHead;

        //2、然后,我们定义两个ListNode型变量用来存储位置m的前一个节点和位置n的后一个节点
        ListNode pre;
        ListNode end;
        //创建mNode和nNode用来记录切割后链表的头和尾节点
        ListNode mNode;
        ListNode nNode;

        //3、遍历寻找到m的前一个节点的位置,并使用pre表示及m位置的节点,并使用mNode表示
        for (int i = 0; i < m-1; i++) {
            p = p.next;
        }
        pre = p;
        mNode = p.next;

        //4、遍历寻找到位置n的节点使用nNode表示及n的下一个节点,并使用end表示
        for (int i = 0; i < n-m+1; i++) {
            p = p.next;
        }
        nNode = p;
        end = p.next;

        //5、对指定位置的链表进行切割
        pre.next = null;
        nNode.next = null;

        //6、对切割后的链表进行反转
        Reverse(mNode);

        //7、对反转后的链表进行拼接
        pre.next = nNode;
        mNode.next = end;

        //8、最后,返回的是tempHead.next
        return tempHead.next;
    }

//此处使用的头插法进行链表的反转,也可使用栈结构(看我博客的上一篇文章有)
    public ListNode Reverse(ListNode head) {
        ListNode newHead = null;
        ListNode tmp;
        while (head != null) {
            //传教tmp节点用于记录head的next节点
            tmp = head.next;
            //使用头插法
            head.next = newHead;
            newHead = head;
            head = tmp;
        }
        return newHead;
    }

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

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

相关文章

chatgpt赋能python:PythonGCD:介绍与计算方法

Python GCD&#xff1a;介绍与计算方法 Python是一种流行的编程语言&#xff0c;它在计算数学问题时也非常实用。其中一个基本的数学问题就是计算两个或多个数的最大公约数&#xff08;GCD&#xff09;。Python的math库提供了计算GCD的方法&#xff0c;但我们也可以编写我们自…

13.STM32F103C8使用PSRAM64H外扩RAM空间

一、简介 最近在调试STM32F103C8驱动墨水屏的实验&#xff0c;在使用过程中&#xff0c;需要使用大内存的RAM需要&#xff0c;由于C8T6的RAM空间只有20KB&#xff0c;而墨水屏的需要的内存为800*480*2/893.75KB。 在网上查了相关的方案&#xff0c;都是使用STM32F103ZE外扩IS6…

基于模拟退火算法的旅行商问题优化(matlab程序)

0.代码链接 基于模拟退火算法的旅行商问题优化&#xff08;matlab程序&#xff09;资源-CSDN文库 1.简述 金属退火是将金属加热到一定温度&#xff0c;保持足够时间&#xff0c;然后以适宜速度冷却(通常是缓慢冷却&#xff0c;有时是控制冷却)的一种金属热处理工艺。模拟退…

ubuntu22.04安装atlas2.0.0

这是本人《数据治理》课程的课程实验&#xff0c;对本人来说非常具有挑战性。 环境: 1、Apache Atlas 2.0 2、JDK 1.8.0_251 3、Maven 3.6.3 因为是课程作业&#xff0c;不用于生产。使用Atlas内嵌Hbase与Solr的部署方式。 在ubuntu裸机上安装&#xff0c;裸机未安装java&#…

ChatGPT | Word表格整体输出

本文来自欧巴Godwin的博客 &#xff0c;引用必须注明出处&#xff01; 用LangChain读取Word和PDF的文字内容是好的&#xff0c;但如果内容包含表格则读取出来的内容完全没法看。用ChatGPT往往是做企业知识库&#xff0c;所以会出现一个场景&#xff0c;即员工想让ChatGPT讲解包…

2、数据库操作语句:多表查询(表employ、department、location)

目录 1、多表查询连接条件 1&#xff09;在employ、department两张表中查询 2&#xff09;若查询语句中出现了多个表中都存在的字段&#xff0c;必须指明此字段所在的表。 3&#xff09;如果表名比较长&#xff0c;SQL语句中多次使用表名&#xff0c;可以给表起别名&#xf…

chatgpt赋能python:Python实现Fibonacci数列

Python实现Fibonacci数列 Fibonacci数列是一个非常经典的数列&#xff0c;定义如下&#xff1a; F ( 0 ) 0 , F ( 1 ) 1 F(0)0, F(1)1 F(0)0,F(1)1 F ( n ) F ( n − 1 ) F ( n − 2 ) F(n)F(n-1)F(n-2) F(n)F(n−1)F(n−2) 也就是说&#xff0c;第n个数等于前两个数之和…

开环模块化多电平换流器仿真(MMC)N=6

模型简介&#xff1a; 运行环境MATLAB2021a 开环模块化多电平换流器仿真&#xff08;MMC&#xff09;N&#xff1d;6&#xff0c;连接负载&#xff0c;采用载波移相调制。 可以得到换流器输出N&#xff0b;1&#xff1d;7电平的相电压波形。可考虑线路阻抗。 子模块采用半桥结…

chatgpt赋能python:用Python实现网络工具——Ping

用Python实现网络工具——Ping 网络是现代社会不可或缺的一部分&#xff0c;而网络工具也是每个程序员的必备技能之一。其中&#xff0c;Ping是最常用的网络工具之一&#xff0c;主要用于测试两台计算机之间的网络连接质量。今天&#xff0c;我们将着重讨论如何用Python实现Pi…

【初识C语言(5)】C语言关键字+define定义常量和宏

文章目录 1. 常见关键字2. 关键字 typedef3. 关键字 static3.1 修饰局部变量3.2 修饰全局变量3.3 修饰函数 4. define 定义常量和宏 1. 常见关键字 C语言提供了丰富的关键字&#xff0c;这些关键字都是语言本身预先设定好的&#xff0c;用户自己是不能创造关键字的。 这里先主要…

SD/StableDiffusion模型,ai绘画部署教程,谷歌云端零成本部署,支持中文

目录 前言 准备前提 说明 开始搭建 1、第一步&#xff0c;下载ipynb脚本文件 2、第二步&#xff0c;上传一键脚本文件到谷歌云盘 3、选择该.ipynb文件--右键--打开方式--关联更多应用 4、输入框搜索Colaboratory找到该应用&#xff0c;安装 5、安装过程中&#xff0c;…

chatgpt赋能python:Python的pow()函数-实现快速幂运算

Python的pow()函数 - 实现快速幂运算 Python是一门高级编程语言&#xff0c;具有简单易学、功能强大、代码可读性高等特点。在Python的内置函数中&#xff0c;有一个很有用的函数叫做pow()。pow()函数可以对数字进行快速幂运算&#xff0c;其实现方法很简单&#xff0c;但是在…

chatgpt赋能python:Python画轨迹图:认识、用法与优势

Python画轨迹图: 认识、用法与优势 Python的数据可视化能力十分强大。画图工具虽然千千万&#xff0c;但其中&#xff0c;轨迹图是同时准确又美观的图形表现。本文将向读者介绍Python画轨迹图的好处、如何使用以及如何在项目合适的地方使用轨迹图。 了解Python轨迹图 为了更…

chatgpt赋能python:Python绘制波浪线教程

Python绘制波浪线教程 Python是一种高级编程语言&#xff0c;它广泛应用于各种领域&#xff0c;如数据分析、Web开发、自动化操作以及人工智能等等。在这篇文章中&#xff0c;我们将介绍如何使用Python来绘制漂亮的波浪线。 简介 绘制波浪线是一种在艺术设计、信息图表、数据…

MySQL压测实战

写作目的 最近看到一句话是MySQL的TPS是4000&#xff0c;这句话是不严谨的&#xff0c;因为没有说服务器的配置。所以自己买了个服务器做了一个压测。希望自己对数据有一个概念。 注意&#xff1a;服务器不同结果不同&#xff0c;结果不具有普适性。 服务器配置 配置参数CPU…

MySQL数据库操作篇2(表的增删查改约束)

在数据类型那篇文章里&#xff0c;笔者曾经提到过约束条件&#xff0c;但也只是简单的提了提&#xff0c;并没有展开来说&#xff0c;约束条件是MySQL为确保数据正确性&#xff0c;安全性&#xff0c;以及倒逼程序员规范操作的一大利器&#xff0c;这篇文章笔者详细谈谈有哪些约…

0019-TIPS-2019-tokyowesterns-gnote : switch(jump) Doubule Fetch

漏洞源码 #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/fs.h> #include <linux/proc_fs.h> #include <linux/string.h> #include <linux/slab.h> #include <asm/uaccess.h>…

chatgpt赋能python:Python绘制车辆轨迹图

Python绘制车辆轨迹图 在现代交通中&#xff0c;车辆轨迹图是一个广泛应用的技术&#xff0c;它可以被用于道路交通管理&#xff0c;行车安全评估等领域。Python是一种强大的编程语言&#xff0c;它提供了许多绘制数据可视化图表的库。本文将介绍如何使用Python和Matplotlib库…

10.事务消息

4.6 事务消息 4.6.1 流程分析 上图说明了事务消息的大致方案&#xff0c;其中分为两个流程&#xff1a;正常事务消息的发送及提交、事务消息的补偿流程。 1)事务消息发送及提交 (1) 发送消息(half消息)。 (2) 服务端响应消息写入结果。 (3) 根据发送结果执行本地事务(如果写入失…

Golang -> Go 语言快速开发入门

Go 语言快速开发入门 开发一个 hello.go 程序Golang 执行流程分析两种执行流程的方式区别:编译和运行说明 Go 程序开发的注意事项注释行注释多行注释 开发一个 hello.go 程序 package mainimport "fmt"func main() {fmt.Print("hello") }输出: hello对上图…