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

【刷题-牛客】链表内指定区间反转

链表定区间翻转链表

题目链接

链表内指定区间反转_牛客题霸_牛客网 (nowcoder.com)

题目描述

在这里插入图片描述

核心思想

遍历链表的过程中在进行原地翻转

  • [m,n]翻转区间记作子链表,找到子链表的 起始节点 left 和 终止节点 right
  • 记录在链表中 子链表起始节点的前驱节点 leftPre 和子链表 终止节点的后继结点 rightNext
  • 对子链表进行反转处理后与leftPre 和rightNext重新相连
  • 为了防止头结点 head 的多种情况的讨论,选择 另声明一个虚拟头结点 newHead 作为遍历的起点

详细图解

  • 按图索骥

在这里插入图片描述


  • 开始头插

在这里插入图片描述


  • 头插结束

)


  • 子链表重新链接

在这里插入图片描述


代码实现

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** @param head ListNode类* @param m    int整型* @param n    int整型* @return ListNode类*///我们把[m,n]之间的节点当做是子链表public ListNode reverseBetween(ListNode head, int m, int n) {//虚拟头结点ListNode newHead = new ListNode(-1);newHead.next = head;//把虚拟头结点连入链表中//找到子链表的起始节点left和终止节点right(要求记录下左子链表左节点的前驱节点)ListNode leftPre = newHead;while (m > 1) {leftPre = leftPre.next;m--;}//while结束之后保留的leftPre即起始节点的前驱结点ListNode left = leftPre.next;//子链表的起始节点ListNode right = newHead;while (n > 0) {right = right.next;n--;}ListNode rightNext = right.next;//保留的rightNext即终止节点的后继结点//子链表进行头插ListNode subHead = left;//子链表的头结点ListNode cur = subHead.next;while (cur != rightNext) {ListNode curNext = cur.next;cur.next = subHead;subHead = cur;cur = curNext;}//开始链接子链表leftPre.next = subHead;left.next = rightNext;return newHead.next;//返回链表原头结点}static class ListNode {int val;ListNode next = null;public ListNode(int val) {this.val = val;}}
}

复杂度分析

  1. 时间复杂度

    O(N) ,最坏情况下,需要遍历整个链表

  2. 空间复杂度

    O(1) ,使用到常数个变量

http://www.lryc.cn/news/173697.html

相关文章:

  • 【MySQL】 MySQL索引事务
  • mybatis-plus异常:dynamic-datasource can not find primary datasource
  • 购物H5商城架构运维之路
  • 【NAD NADPH; FMN FAD ; NMN -化学】
  • Shell脚本之if的用法
  • Java实验案例(一)
  • Service Worker原理
  • MySQL集群高可用架构之MHA
  • 【算法专题突破】二分查找 - 704. 二分查找(16)
  • 基于Docker_Nginx+LVS+Flask+MySQL的高可用Web集群
  • 如何写一份出色的毕业设计任务书
  • RedHat 服务器安装NGINX
  • 跨域问题解决方案(三种)
  • 多轨音频编辑软件Multitrack Editor mac中文版主要功能
  • 工作中遇到的事务
  • 【论文写作】Latex 所有符号汇总参考
  • pom.xml中解决“vulnerable dependency maven:org.yaml:snakeyaml:1.33“警告问题
  • 栈和队列-Java
  • ORA-07445: exception encountered: core dump [kdxlin()+4088]---惜分飞
  • 【C刷题】day3
  • go 线程限制数量 --chatGPT
  • 【Linux网络编程】日志与守护进程
  • 多输入多输出 | MATLAB实现CNN-BiGRU卷积双向门控循环单元多输入多输出
  • Qt: 鼠标形状设置
  • 【Oracle】Oracle系列之七--表的创建与管理
  • C/C++运算符超详细讲解(系统性学习day5)
  • Android 遍历界面所有的View
  • 建筑能源管理(1)——建筑能源管理的概念
  • SpringSecurity
  • C++ vector模拟实现