《算法通关村第二关——指定区间反转问题解析》

news2024/10/7 6:29:06

《算法通关村第二关——指定区间反转问题解析》

题目描述

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

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

头插法

通过一个一个插入前面进行反转。

在这里插入图片描述

代码:

/**
 * 头插法指定区间反转
 * @param head
 * @param start就是题中的left
 * @param end 题中的right
 * @return
 */
public static LinkedNode ReverseSpecificInterval1(LinkedNode head , int start,int end){
    // 设置dummyNode 是这类问题的一般解法
    LinkedNode dummyNode = new LinkedNode(-1);
    dummyNode.setNext(head);
    LinkedNode pre = dummyNode;
    for(int i = 0 ; i < start - 1 ; i++){
        pre = pre.getNext();
    }
    LinkedNode cur = pre.getNext();
    LinkedNode next = null;
    for(int i = 0 ;i < end-start ; i++){
        next = cur.getNext();
        cur.setNext(next.getNext());
        next.setNext(pre.getNext());
        pre.setNext(next);
    }
    return dummyNode.getNext();
}

穿针引线法

通过把指定区间提取出来,然后进行反转,最后再接回原链表的方法。

在这里插入图片描述

上代码:

/**
     * 穿针引线
     * @param head
     * @param start
     * @param end
     * @return
     */
    public static LinkedNode ReverseSpecificInterval2(LinkedNode head,int start , int end){
        // 因为头节点可能发生变化,使用虚拟头节点可以便面复杂的分类讨论
        LinkedNode dummyNode = new LinkedNode(-1);
        dummyNode.setNext(head);
        LinkedNode pre = dummyNode;
        // 第一步,从虚拟头节点走start-1步,来到start节点的前一个结点。
        for ( int i = 0 ; i < start -1 ; i++){
            pre = pre.getNext();
        }
        // 第二步,从pre 再走end-start+1步来到end节点
        LinkedNode endNode = pre;
        for(int i = 0 ; i  < end-start+1 ; i++){
            endNode = endNode.getNext();
        }
        // 第三步切出一个子链
        LinkedNode startNode = pre.getNext();
        LinkedNode succ = endNode.getNext();
        endNode.setNext(null);
        // 第四步反转链表
        reverseLinkedList(startNode);
        // 第五步,接回原来的链表
        pre.setNext(endNode);
        startNode.setNext(succ);
        return dummyNode.getNext();
    }

    private static void reverseLinkedList(LinkedNode startNode) {
        LinkedNode pre = null ;
        LinkedNode cur = startNode;
        while(cur != null){
            LinkedNode next = cur.getNext();
            cur.setNext(pre);
            pre = cur;
            cur = next;
        }
    }

近期在自学 Java 做项目,加入了一个编程学习圈子,里面有编程学习路线和原创的项目教程,感觉非常不错。还可以 1 对 1 和大厂嘉宾交流答疑,也希望能对大家有帮助,扫 ⬇️ 二维码即可加入。

在这里插入图片描述

也可以点击链接:我正在「编程导航」和朋友们讨论有趣的话题,你⼀起来吧?

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

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

相关文章

打工人必备技能——找资源~

让我看看还有哪个打工人不会找资源&#xff0c;不过没关系&#xff0c;相信看完我这篇内容&#xff0c;不会的也学会了&#xff01; 一、XDown 全网1000平台视频解析下载器&#xff0c;在线视频下载工具&#xff0c;几乎能下全网所有平台的视频&#xff0c;而且下完还能自由转…

HammerDB的安装和使用(超详细)

目录 ​编辑 一、HammerDB的介绍 二、HammerDB的安装 1、下载hammerdb安装包 2、权限配置以及安装 3、查看安装目录 三、安装前的配置 1、启动监听 2、启动数据库 3、创建表空间 1.修改临时表空间 2…

STM32F4之系统滴答定时器

一、系统滴答定时器概述 传统定时器&#xff1a;如手机闹钟&#xff0c;闹钟等就是一个简单地计数器。 定时器概念&#xff1a;由时钟源计数器计数值组成的计数单元。 系统嘀嗒定时器首先是存在于内核里&#xff0c;系统嘀嗒时钟假如用的是同一个内核那么里面相关的配置&…

移动端web调试工具vConsole使用详解

目录 简介&#xff1a; 使用 方法一&#xff1a;使用 npm&#xff08;推荐&#xff09; 方法二&#xff1a;使用 CDN 直接插入到 HTML 开发环境显示生成环境删除 vConsole是框架无关的&#xff0c;可以在 Vue、React 或其他任何框架中使用&#xff0c;类似于微信小程序体验…

《计算机是怎样跑起来的》计算机三大原则、TCP/IP、xml

文章目录 计算机的三个根本基础TCP/IP 网络的简单理解向路由器更进一步DNS服务器IP 地址和 MAC 地址的对应关系TCP 的作用以及 TCP/IP网络的层级模型 基本概念的阐述XML定义优势结构 计算机的三个根本基础 计算机是执行输入、运算、输出的机器。 计算机的硬件由大量集成电路 IC…

【C语言】进阶——程序编译

目录 一&#xff1a;&#x1f512;程序环境 程序的翻译环境和执行环境 &#x1f4a1;1.1翻译环境 预编译阶段&#xff1a; 编译阶段&#xff1a; 汇编阶段&#xff1a; 链接阶段&#xff1a; &#x1f4a1;1.2运行环境 二&#xff1a;&#x1f512;预处理详解 &…

进阶JAVA篇-深入了解 Set 系列集合

目录 1.0 Set 类的说明 1.1 Set 类的特点 1.2 Set 类的常用API 2.0 HashSet 集合的说明 2.1 从 HashSet 集合的底层原理来解释是如何实现该特性 2.2 HashSet 集合的优缺点 2.3 深入理解 HashSet 集合去重的机制 2.4 如何快速编写已经重写好的 hashCode 和 equals 方法 3.0 Tree…

空中计算(Over-the-Air Computation)学习笔记

文章目录 写在前面 写在前面 本文是论文A Survey on Over-the-Air Computation的阅读笔记&#xff1a; 通信和计算通常被视为独立的任务。 从工程的角度来看&#xff0c;这种方法是非常有效的&#xff0c;因为可以执行孤立的优化。 然而&#xff0c;对于许多面向计算的应用程序…

【Arduino TFT】基于 ESP32S3 S7789 240x240 TFT实现的SD2 天气时钟

忘记过去&#xff0c;超越自己 ❤️ 博客主页 单片机菜鸟哥&#xff0c;一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-10-21 ❤️❤️ 本篇更新记录 2023-10-21 ❤️&#x1f389; 欢迎关注 &#x1f50e;点赞 &#x1f44d;收藏 ⭐️留言&#x1f4dd;&#x1f64…

口袋参谋:如何找蓝海词?带动店铺搜索流量!

​为什么店铺没流量&#xff1f;很多新手商家在优化标题的时候从来不找词&#xff0c;凭着自己的想象做标题&#xff0c;这种情况很难获得流量。 要想获得更多的流量&#xff0c;符合产品属性的蓝海词是我们当属首选&#xff0c;不用和红海词去竞争&#xff0c;更不用和比较有…

java springboot+VUE OA企业办公自动化系统前后端分离开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot VUE OA企业办公自动化系统是一套完善的完整信息管理类型系统&#xff0c;结合springboot框架和VUE完成本系统 后端采用mybatis进行数据库交互&#xff0c;对理解JSP java编程开发语言有帮 助系统采用springboot框架&#xff08;MVC模式开发&#xff…

Pandas数据处理分析系列4-数据如何清洗

Pandas-数据清洗 ①缺失值处理 使用fillna()函数将缺失值替换为指定的值或使用插值方法填充缺失值 示例:df.fillna(0) #将缺失值替换为0 import pandas as pddf1=pd.read_excel("销售表.xlsx") # 检查每列是否缺失 print(df1.isna) 效果如下: import pandas as …

std::string_view概念原理及应用

概念 使用const string&作为参数是先使用字符串字面量编译器会创建一个临时字符串对象然后创建std::string。 或者一个函数提供char*和const string&参数的两个版本函数&#xff0c;不是优雅的解决方案。 于是需要一个只使用内存不维护内存的类。 原理 在visual s…

数据结构——三路划分(快排优化)

刷Leetcode时遇到的问题&#xff0c;用普通的快排去跑&#xff0c;发现有问题。 普通的Hoare或者其他的快排好像都没有直接解决掉这个问题&#xff0c;当一个数重复出现的时候&#xff0c;用普通的快排效率其实并没有那么高。所以&#xff0c;这也是普通快排的缺点之一。 所以&…

STM32F4X之GPIO

一、GPIO概述 主控芯片信息如下&#xff1a; 主频&#xff1a;168MHZ内核&#xff1a;ARM-M4FLASH:1MSRAM:192KB引脚&#xff1a;100GPIO:82电压&#xff1a;1.8~3.6V 1.1GPIO概念及其作用 GPIO概念&#xff1a;通用输入输出(General Purpose Input Output)&#xff0c;主要作用…

解决报错【error: Microsoft Visual C++ 14.0 or greater is required】

当我们在环境中pip install某些python的依赖包时,直接pip install有时可能出现如下报错: error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/,这说…

Linux搭建Redis环境

1. 基础环境 名称说明CentOS 7.6Linux操作系统版本redis-5.0.0.tar.gzRedis二进制安装包 2. 服务安装 服务端路径&#xff1a;usr/loacl/redis/redis-server客户端路径&#xff1a;usr/loacl/redis/redis-cli # 解压二进制包 [rootzhouwei resource]# tar -zxvf redis-5.0.…

IntelliJ IDEA 2023版本 Debug 时没有Force Step Into 按钮解决方法

IntelliJ IDEA 2023版本 Debug 时没有Force Step Into 按钮解决方法 force step into作用是能够去查看原码&#xff0c; 新版本idea默认移除了这个按钮&#x1f622; 那么让我们来把它找出来叭✋ 但是我们可以通过设置&#xff0c;使用step into就可以进入系统方法。 1.单击…

【TensorFlow1.X】系列学习笔记【入门二】

【TensorFlow1.X】系列学习笔记【入门二】 大量经典论文的算法均采用 TF 1.x 实现, 为了阅读方便, 同时加深对实现细节的理解, 需要 TF 1.x 的知识 文章目录 【TensorFlow1.X】系列学习笔记【入门二】前言神经网络的参数神经网络的搭建前向传播反向传播 总结 前言 学习了张量、…

react dispatch不生效的坑

一、前言 最近写react antd项目&#xff0c;在A页面中使用了dispatch方法&#xff0c;然后B页面中嵌套A页面&#xff0c;没有问题&#xff1b; 但是在C页面中嵌套A页面的时候&#xff0c;就发现dispatch方法没有执行&#xff0c;也不报错&#xff0c;就很奇怪&#xff1b; 还…