【算法设计与分析】反转链表 ||

news2024/11/26 0:34:40

       📝个人主页:五敷有你      

 🔥系列专栏:算法分析与设计

⛺️稳中求进,晒太阳

题目

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

示例

示例 1:

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

示例 2:

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

思路(虚拟头节点)

  1. 创建一个虚拟节点 dummy,并将其 next 指向 head,这样做是为了简化边界情况的处理。
  2. 找到左边界的前一个节点 prev。遍历链表,移动 prev 指针到第 left - 1 个节点处。
  3. 从 prev 开始,遍历链表直到达到右边界的位置 right。
  4. 在遍历过程中,依次将当前节点的 next 指针指向其后继节点的后继节点(即跳过当前节点的后继节点),然后将后继节点连接到 prev 节点后面。重复这一过程直到完成 left 到 right 区间的节点逆序。
  5. 返回虚拟节点 dummy 的 next 指针,即为反转后的链表头节点。

代码实现

class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

public class ReverseLinkedListBetween {
    public ListNode reverseBetween(ListNode head, int left, int right) {
        if (head == null || left == right) {
            return head;
        }
        
        // 使用虚拟节点来简化操作
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        
        // 找到左边界的前一个节点
        ListNode prevLeft = dummy;
        for (int i = 1; i < left; i++) {
            prevLeft = prevLeft.next;
        }
        
        // 开始头插法反转
        ListNode current = prevLeft.next;
        for (int i = left; i < right; i++) {
            ListNode next = current.next;
            current.next = next.next;
            next.next = prevLeft.next;
            prevLeft.next = next;
        }
        
        return dummy.next;
    }
}

运行结果

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

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

相关文章

《UE5_C++多人TPS完整教程》学习笔记16 ——《P17 菜单类(The Menu Class)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P17 菜单类&#xff08;The Menu Class&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是译者&#x…

安装Centos系统

1.镜像安装 镜像安装:Centos7安装 2.安装过程(直接以图的形式呈现) 选择你已经下载好的镜像 回车即可,等待安装 等待安装即可

MOS管开关电路实例、功耗计算

一、mos管的工作区域 mos管有三个工作区域&#xff1a; 截止区域 线性&#xff08;欧姆&#xff09;区域 饱和区域 当 VGS < VTH时&#xff0c;mos管工作在截止区域。在该区域中&#xff0c;mos管处于关断状态&#xff0c;因为在漏极和源极之间没有感应沟道。 对于要感…

【Linux】环境变量及相关指令

一、环境变量的基本概念 其实&#xff0c;我们早就听说过环境变量&#xff0c;比如在学习 JAVA / Python 的时候&#xff0c;会在 Windows 上配置环境变量&#xff1a; 环境变量到底是什么呢&#xff1f; 环境变量&#xff08;environment variables&#xff09;一般是指在操作…

第四篇:SQL语法-DDL-数据定义语言

大年初一限定篇&#x1f600; &#xff08;祝广大IT学习者、工作者0 error 0 warning&#xff01;&#xff09; DDL英文全称是Data Definition Language&#xff08;数据定义语言&#xff09;&#xff0c;用来定义关系模式、删除关系、修改关系模式以及创建数据库中的各种对象 …

毕业设计vue+php幼儿园网站系统yl567

幼儿园网站系统。采用vscode集成IDE对幼儿园网站系统统进行开发,整合系统的各个模块。 拟开发的幼儿园网站系统通过测试,确保在最大负载的情况下稳定运转,各个模块工作正常,具有较高的可用性。系统整体界面简洁美观,用户使用简单,满足用户需要。在因特网发展迅猛的当今社会,幼儿…

Spring Boot 笔记 021 项目部署

1.1 引入坐标&#xff0c;并双击package打包成jar包 1.2 在服务器上运行jar包 1.3 使用postman测试 2.1 运行配置 2.1.1 命令更改端口 java -jar big-event-1.0-SNAPSHOT.jar --server.port7777 2.1.2 环境变量更新&#xff08;略&#xff09; 2.1.3 外部配置文件&#xff0c…

Excel练习:日历

Excel练习&#xff1a;日历 ‍ 题目&#xff1a;制作日历 ‍ ​​ 用rows和columns函数计算日期单元格偏移量 一个公式填充所有日期单元格 ​​ ‍

爬爬爬——qq模拟登录,古诗文网模拟登录并爬取内容(cookie)

cookie——可以理解为&#xff0c;记录为登录状态。如果在登录一个网站之后&#xff0c;想拿到信息发现404了&#xff0c;就是没有加cookie在这个header里。 下图加了cookie和没有加的对比&#xff08;我是用了selenuim自动化登录的&#xff09;&#xff1a; 下面是加了的 这个…

数据分析案例-基于亚马逊智能产品评论的探索性数据分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

FreeRTOS 调度算法简述

优先级抢占式调度 本章的示例程序已经演示了 FreeRTOS 在什么时候以及以什么方式选择一个什么 样的任务来执行。  每个任务都赋予了一个优先级。  每个任务都可以存在于一个或多个状态。  在任何时候都只有一个任务可以处于运行状态。  调度器总是在所有处于就…

华为23年9月笔试原题,巨详细题解,附有LeetCode测试链接

文章目录 前言思路主要思路关于f函数的剖析Code就到这&#xff0c;铁子们下期见&#xff01;&#xff01;&#xff01;&#xff01; 前言 铁子们好啊&#xff01;今天阿辉又给大家来更新新一道好题&#xff0c;下面链接是23年9月27的华为笔试原题&#xff0c;LeetCode上面的ha…

VueCLI核心知识3:全局事件总线、消息订阅与发布

这两种方式都可以实现任意两个组件之间的通信 1 全局事件总线 1.安装全局事件总线 import Vue from vue import App from ./App.vueVue.config.productionTip false/* 1.第一种写法 */ // const Demo Vue.extend({}) // const d new Demo()// Vue.prototype.x d // 把Dem…

Python算法探索:从经典到现代(三)

一、引言 随着信息技术的飞速发展&#xff0c;数据已经成为现代社会不可或缺的资源。Python&#xff0c;作为数据处理和分析的利器&#xff0c;为我们提供了大量强大的库和工具&#xff0c;用于从经典到现代的各种算法探索。本文将带你领略Python在算法领域的魅力&#xff0c;从…

OJ刷题:猜名次和找凶手【建议收藏点赞】

目录 1. 猜名次2. 找凶手 1. 猜名次 代码实现&#xff1a; #include <stdio.h>int main() {int a 0;int b 0;int c 0;int d 0;int e 0;for (a 1; a < 5; a){for (b 1; b < 5; b){for (c 1; c < 5; c){for (d 1; d < 5; d){for (e 1; e < 5; e)…

Windows 版Oracle 数据库(安装)详细过程

首先到官网上去下载oracle64位的安装程序 第一步&#xff1a;将两个datebase文件夹解压到同一目录中。 当下载完成后,它里面是两个文件夹 win64_11gR2_database_1of2, win64_11gR2_database_2of2,我们需要把其中的一个database文件夹整合在一起(复制一个database文件夹到另一…

寒假作业:2024/2/14

作业1&#xff1a;编程实现二维数组的杨辉三角 代码&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, const char *argv[]) {int n;printf("please enter n:");scanf("%d",&n);int a…

Nvm安装(windows版)

1、nvm 是什么 &#xff08;1&#xff09;nvm(Node.js version manager) 是一个命令行应用&#xff0c;可以协助您快速地 更新、安装、使用、卸载 本机的全局 node.js 版本。 &#xff08;2&#xff09;有时候&#xff0c;我们可能同时在进行多个项目开发&#xff0c;而多个项…

Netty Review - 服务端channel注册流程源码解析

文章目录 PreNetty主从Reactor线程模型服务端channel注册流程源码解读入口 serverBootstrap.bind(port)执行队列中的任务 &#xff1a; AbstractUnsafe#register0注册 doRegister() 源码流程图 Pre Netty Review - ServerBootstrap源码解析 Netty Review - NioServerSocketCh…

深入探索Pandas读写XML文件的完整指南与实战read_xml、to_xml【第79篇—读写XML文件】

深入探索Pandas读写XML文件的完整指南与实战read_xml、to_xml XML&#xff08;eXtensible Markup Language&#xff09;是一种常见的数据交换格式&#xff0c;广泛应用于各种应用程序和领域。在数据处理中&#xff0c;Pandas是一个强大的工具&#xff0c;它提供了read_xml和to…