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

后端开发刷题 | 链表内指定区间反转【链表篇】

描述

将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n)O(n),空间复杂度 O(1)O(1)。
例如:
给出的链表为 1→2→3→4→5→NULL1→2→3→4→5→NULL, m=2,n=4
返回 1→4→3→2→5→NULL

数据范围: 链表长度 0<size≤10000,0<m≤n≤size,链表中每个节点的值满足 ∣val∣≤1000

要求:时间复杂度 O(n) ,空间复杂度 O(n)

进阶:时间复杂度 O(n),空间复杂度 O(1)

示例1

输入:

{1,2,3,4,5},2,4

返回值:

{1,4,3,2,5}

示例2

输入:

{5},1,1

返回值:

{5}

思路分析:

这里是反转对应区间,所以可以一个一个进行反转,比如示例1里面,反转2到4这个区间,

可以先将其变成1->3->2->4->5,然后再变成1->4->3->2->5

演变过程:

代码:

import java.util.*;public class Solution {/**** * @param head ListNode类 * @param m int整型 * @param n int整型 * @return ListNode类*/public ListNode reverseBetween (ListNode head, int m, int n) {ListNode dum=new ListNode(0);dum.next=head;ListNode pre=dum;for(int i=1;i<m;i++){pre=pre.next;// 找到m的上一个节点}head=pre.next;// 从m的位置开始进行交换ListNode next;// 用于暂存遍历节点的后继节点for(int i=m;i<n;i++){// 暂存遍历节点的下一个节点next=head.next;// 让当前节点指向 后继节点的后继节点head.next=next.next;// 让后继节点指向反转元素的首位next.next=pre.next;// 让m的上一个节点 指向 此后继节点pre.next=next;}return dum.next;}
}


http://www.mrgr.cn/news/1971.html

相关文章:

  • 第6章 Android应用资源
  • 【EI会议】第三届环境工程与可持续能源国际会议征稿开启
  • 做跨境,东南亚市场要做哪些准备!
  • 【无标题】playbook的基本使用
  • Unity3D 自定义窗口
  • C语言——字符函数、字符串函数和内存函数
  • 基于vue框架的哀牢犁耙会助农系统r4347(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 如何选择较为安全的第三方依赖版本?
  • 前端学习Day29
  • C# String的方法
  • 美国政府紧急应对三星Galaxy手机安全漏洞
  • 借助Aapose.Cells 使用 C# 在 Excel 中读取、添加和编辑线程注释
  • Java Web —— 第六天(Mybatis)
  • 【Linux】yum、vim、gcc/g++的使用
  • 【LeetCode Cookbook(C++ 描述)】一刷二叉树综合(下)
  • C++参悟-单例模式
  • C++ //练习 17.2 定义一个tuple,保存一个string、一个vector<string>和一个pair<string, int>。
  • SpringSecurity实现登录功能实战!!!
  • re正则入门
  • Python生成432Hz音频