Leetcode92:反转链表II(区间反转链表)

一、题目

给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
示例:

输入:head = [1,2,3,4,5], left = 2, right = 4
输出:[1,4,3,2,5]

输入:head = [5], left = 1, right = 1
输出:[5]

left和right是索引,但是是从1开始(很无语,,,害我写了好多次才通过)

二、题解

思路:先找到left节点,再计算left到right中间的次数(就是要循环的次数),用3个指针:

  • preHead:指向left索引的上一位(他的next用来连接要插入到left头的节点)
  • pre:指向left索引
  • cur:指向left索引的下一位(要把cur插入到头部(即PreHead.next)去)

每次让left后面的节点(cur指针指向的元素)插入到left前面(preHead指针的位置)。即头插法(可以看我上一篇文章的反转链表的第一种解法,只是这里不创建新的节点,而是直接改变前后节点的指针;头插法就是依次把后面的元素插入到第一位去,一直到right结束,那么当前区间的链表就逆序了)

比如head = [1,2,3,4,5], left = 2, right = 4:

  • 3(cur指针指向的节点) 插入到2(pre指针指向的节点)的前面; [1,3,2,4,5]
  • cur指针往后移动
  • 4(cur指针指向的节点)插入到3(pre指针指向的节点)的前面: [1,4,3,2,5]

为了方便操作,设置一个虚拟头节点:
因为按照3个指针的写法,left位置前面是有一个节点的,但是如果要逆序的就是第一个和第二个,如果没有头节点,preHead就不存在了,就又要特殊处理。所以设置一个虚拟头节点让left不管是第一位还是第n位,都能走同样的逻辑。
第一遍:
在这里插入图片描述

第二遍:
在这里插入图片描述

class Solution {

    public ListNode reverseBetween(ListNode head, int left, int right) {
        if (left == right) {
            return head;
        }
        //创建一个虚拟头节点指向一开始的头节点
        ListNode dummy = new ListNode(-1,head);

        left = left - 1;
        right = right - 1;

        //要开始反转的节点的前一个节点
        ListNode preHead;
        head = dummy;
        //找到要翻转的起点 1->2->3->4->5->6
        //1->2->3->4->5->6 (2,4)
        for (int i = 0; i < left; i++) {
            head = head.next;
        }
        preHead = head;
        //反转的起点
        ListNode pre = preHead.next;
        // 要移动的节点
        ListNode cur = preHead.next.next;

        if (cur == null) {
            //链表只有两个节点 直接交换两个节点返回
            ListNode next = preHead.next;
            preHead.next = null;
            next.next = preHead;
            return next;
        }

        //要翻转的次数
        for (int j = 0; j < right-left; j++) {
             //暂存
            ListNode newHead = preHead.next;
            //暂存
            ListNode nextCur = cur.next; 

            pre.next = nextCur;
            preHead.next = cur;
            cur.next = newHead;

            //指针往前移动
            cur = nextCur;
        }
        return dummy.next;
    }
}
class ListNode {
    int val;
    ListNode next;

    ListNode() {
    }

    ListNode(int val) {
        this.val = val;
    }

    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }

    @Override
    public String toString() {
        return "ListNode{" +
                "val=" + val +
                ", next=" + next +
                '}';
    }
}

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

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

相关文章

一篇文章解决你的无线AP选型难题:从入门到精通

无线网络覆盖项目中&#xff0c;无线AP的合理选型和部署非常重要。今天给大家安排。 这篇文章&#xff0c;给你总结了6类典型的无线组网场所&#xff0c;针对每种场景的特点&#xff0c;给出相应的设备选型和部署的方案&#xff0c;同时整理了一些部署无线AP过程中容易忽略的细…

阿里云服务器一键部署幻兽帕鲁专属服务器,图形化可视化修改游戏参数是如此简单!

幻兽帕鲁这款游戏最近很火&#xff0c;在线玩家太多了&#xff0c;官方服务器也是承压巨大&#xff0c;很多玩家现在都是搭建自己的专属幻兽帕鲁服务器来玩。搭建教程现在也是越来越简单了&#xff0c;可以说是真正的零基础&#xff0c;一看就会&#xff0c;并且开箱即玩&#…

GMT绘图笔记

(1)图框设置。在利用GMT绘制图件时&#xff0c;需要设置边框的类型&#xff0c;字体的大小&#xff0c;标记距离边框的距离。主要涉及的参数有&#xff1a; gmt set MAP_FRAME_TYPE plain/fancy 可以调整边框为火车轨道或者线段。 (2)调整图框的粗细&#xff1a;主要是包含有…

浅析Redis③:命令处理之数据返回Client(下)

写在前面 Redis作为我们日常工作中最常使用的缓存数据库&#xff0c;其重要性不言而喻&#xff0c;作为普通开发者&#xff0c;我们在日常开发中使用Redis&#xff0c;主要聚焦于Redis的基层数据结构的命令使用&#xff0c;很少会有人对Redis的内部实现机制进行了解&#xff0c…

Python算法题集_合并区间

本文为Python算法题集之一的代码示例 题目56&#xff1a;合并区间 说明&#xff1a;以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需…

leetcode 1.两数之和(C++)DAY1(待补充哈希表法)

文章目录 1.题目描述示例提示 2.解答思路3.实现代码结果4.总结 1.题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&…

假期2.3

第二章 引用内联重载 一&#xff0e;选择题-* 1、适宜采用inline定义函数情况是&#xff08;C&#xff09; A. 函数体含有循环语句 B. 函数体含有递归语句‘、考科一 ’ C. 函数代码少、频繁调用 D. 函数代码多、不常调用 2、假定一个函数为A(int i4, int j0) {;}, 则执行“A …

Datawhale组队学习 Task10 环境影响

第12章 环境影响 在本章中&#xff0c;首先提出一个问题&#xff1a;大语言模型对环境的影响是什么&#xff1f; 这里给出的一个答案是&#xff1a;气候变化 一方面&#xff0c;我们都听说过气候变化的严重影响(文章1、文章2)&#xff1a; 我们已经比工业革命前的水平高出1.…

LeetCode热题HOT100【栈的压入、弹出序列】

&#x1f525;LeetCode热题HOT100【栈的压入、弹出序列】 1. 题目来源2.题目 1. 题目来源 来自LeetCode热题HOT100 https://leetcode.cn/studyplan/top-100-liked/?isDarktrue 2.题目 题目地址 Leetcode地址 3.Stack 在Java中&#xff0c;Stack 是一个基于后进先出&#…

玩美移动为花西子海外官网打造AR虚拟试妆决方案

全球领先的增强现实&#xff08;AR&#xff09;及人工智能&#xff08;AI&#xff09;美妆科技领导者及玩美系列APP开发商——玩美移动&#xff08;纽交所代码&#xff1a;PERF&#xff09;于近日宣布携手知名美妆品牌花西子&#xff0c;在其线海外官方网页提供多项彩妆虚拟试妆…

TanDEM-X30米DEM数据介绍

一、背景 之前介绍了Copernicus 30米DEM以及Alos 30米DEM数据的详细介绍以及接入到Cesium中的效果展示&#xff0c;有遥感专业工作者对比了Copernnicus、ALOA、ASTER、NASA、SRTM这几家30米DEM数据&#xff0c;得出了Copernicus 30米DEM数据是最好的全球级30米DEM数据&#xf…

Java8 中文指南(一)

Java8 中文指南&#xff08;一&#xff09; 文章目录 Java8 中文指南&#xff08;一&#xff09;《Java8 指南》中文翻译接口的默认方法(Default Methods for Interfaces)Lambda 表达式(Lambda expressions)函数式接口(Functional Interfaces)方法和构造函数引用(Method and Co…

Unity 图片不改变比例适配屏幕

Unity 图片不改变比例适配屏幕 前言项目场景布置代码编写添加并设置脚本效果 前言 遇到一个要让图片适应相机大小&#xff0c;填满屏幕&#xff0c;但不改变图片比例的需求&#xff0c;记录一下。 项目 场景布置 代码编写 创建AdaptiveImageBackground脚本 using System.C…

QT 应用中集成 Sentry

QT 应用中集成 Sentry QT应用中集成 SentrySentry SDK for C/C注册 Sentry 账号QT 应用中集成 Sentry触发 Crash 上报 QT应用中集成 Sentry Sentry 是一个开源的错误监控和日志记录平台&#xff0c;旨在帮助开发团队实时捕获、跟踪和解决软件应用程序中的错误和异常。它提供了…

Python flask 表单详解

文章目录 1 概述1.1 request 对象 2 示例2.1 目录结构2.2 student.html2.3 result.html2.4 app.py 1 概述 1.1 request 对象 作用&#xff1a;来自客户端网页的数据作为全局请求对象发送到服务器request 对象的重要属性如下&#xff1a; 属性解释form字典对象&#xff0c;包…

如何批量获取当前文件夹下的文件名

最近&#xff0c;在和网友交流时&#xff0c;对方推荐了一个视频&#xff0c;我打开一看&#xff0c;是一个手工获取当前目录下所有文件名的手机视频。用的方法是在win11中复制所有文件的路径&#xff0c;然后粘贴到Excel当中&#xff0c;通过查找替换和分列的方法&#xff0c;…

EasyX图形库学习(二)

目录 一、文字绘制函数 settextstyle 设置当前文字样式。 outtextxy 在指定位置输出字符串。 ​编辑 但如果直接使用,可能有以下报错&#xff1a; 三种解决方案&#xff1a; 将一个int类型的分数,输出到图形界面上 如果直接使用&#xff1a; 会把score输入进去根据A…

被人疯狂吐槽的预制菜,居然是资本看重的“万亿级”市场?

被人疯狂吐槽的预制菜&#xff0c;居然是资本看重的“万亿级”市场&#xff1f; 文丨微三云营销总监胡佳东&#xff0c;点击上方“关注”&#xff0c;为你分享市场商业模式电商干货。 - 大家是不是以为只有被天天吐槽难吃的外卖和小饭店&#xff0c;才会用预制菜&#xff0c;…

#从零开始# 在深度学习环境中,如何用 pycharm配置使用 pipenv 虚拟环境

为Python项目创建虚拟环境 在深度学习环境和一般python环境中安装pipenv基本一致&#xff0c;只需要确认好pipenv指定的python版本即可,安装pipenv前&#xff0c;可以通过python --version来确认安装版本 快捷键&#xff1a;crtl alt S 查看interpreter&#xff0c;查看所有…

代码随想录算法训练营第42天 | 01背包问题,你该了解这些! 01背包问题,你该了解这些! 滚动数组 416. 分割等和子集

目录 01背包问题&#xff0c;你该了解这些&#xff01; 01 背包 二维dp数组01背包 &#x1f4bb;实现代码 01背包问题&#xff0c;你该了解这些&#xff01; 滚动数组 一维dp数组&#xff08;滚动数组&#xff09; &#x1f4bb;实现代码 416. 分割等和子集 &#x1f…