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

LeetCode:反转区间内的链表

📟作者主页:慢热的陕西人

🌴专栏链接:力扣刷题日记

📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言

文章目录

  • 反转区间内的链表
    • 题目链接
    • 方法一:拆开+反转+连接
      • 思路
      • 代码
      • 复杂度分析
    • 方法二:头插法
      • 思路
      • 代码
      • 复杂度分析

反转区间内的链表

题目链接

92. 反转链表 II - 力扣(LeetCode)

方法一:拆开+反转+连接

思路

image-20240824170036788

Step1:将要反转的区间链表分离出来作为一个单独的链表

image-20240824170130866

Step2:将分离出的链表进行反转

image-20240824170201603

Step3:将反转好区间链表连接回去

image-20240824170229775

代码

    void reverseList(ListNode* head) {ListNode* prev = nullptr;ListNode* cur = head;while(cur) {ListNode* ne = cur->next;cur->next = prev;prev = cur;cur = ne;}}ListNode* reverseBetween(ListNode* head, int left, int right) {if(head == nullptr || head->next == nullptr || right == left) {return head;}//设置一个哨兵头节点ListNode* dummyNode = new ListNode(-1);dummyNode->next = head;ListNode* prev = dummyNode;for(int i = 1; i < left; ++i) {prev = prev->next;}ListNode* leftNode = prev->next;ListNode* rightNode = leftNode;for(int i = 0; i < right - left; ++i) {rightNode = rightNode->next;}ListNode* succ = rightNode->next;prev->next = nullptr;rightNode->next = nullptr;reverseList(leftNode);prev->next = rightNode;leftNode->next = succ;return dummyNode->next;}

复杂度分析

时间复杂度:O(N),这里找四个节点的位置,和反转链表都是O(N)级别,所以时间复杂度就是O(N)级别

空间复杂度:O(1),这里在原地进行反转,只使用了额外的四个指针变量

方法二:头插法

思路

这里的思路简单来说就是:对于反转的区间通过头插的方式进行反转

对于区间中的每个节点进行如下操作,也就是进行一个头插:

Step1:当前节点的next指向next节点的next

Step2:next节点的next指向当前节点

Step3:pre节点的next指向next节点

image-20240824205129028

代码

    ListNode* reverseBetween(ListNode* head, int left, int right) {if(head == nullptr || head->next == nullptr || left == right) {return head;}ListNode* dummyNode = new ListNode(-1);dummyNode->next = head;ListNode* prev = dummyNode;for(int i = 1; i < left; ++i) {prev = prev->next;}ListNode* cur = prev->next;ListNode* ne;for(int i = 0; i < right - left; ++i) {ne = cur->next;cur->next = ne->next;ne->next = prev->next;prev->next = ne;}return dummyNode->next;}

复杂度分析

时间复杂度:O(N), 最坏情况下也只会遍历一次,比方法一的时间复杂度更优

空间复杂度:O(1), 依旧是使用常熟个指针变量


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

相关文章:

  • 2024年最大规模的“裁员潮”的起因经过
  • 备战秋招60天算法挑战,Day26
  • 类和对象(4)
  • 【uniapp/uview1.x】u-collapse 高度随内容自适应
  • 【开发心得】筑梦上海:项目风云录(1)
  • ARM程序的组成和执行过程
  • Kafka简单搭建及常用命令
  • 【数据结构与算法】深入理解归并排序(Merge Sort)
  • 一个简单的springboot项目(有源码)
  • Threadlocal+拦截器+JWT实现登录
  • 【Docker项目实战】使用Docker部署webtop桌面版Linux环境
  • 华为手机数据丢失如何恢复?
  • golang本地缓存fastcache高性能实现原理
  • sqlite3 在Python中使用
  • 筑牢技术防线:服务器故障后的应急响应与未来防范策略
  • 2024年8月22日嵌入式学习
  • Linux——文件系统层次结构,绝对路径
  • 视频提取字幕的软件有哪些?5款高识别率工具任你选
  • SpringBoot文档之构建包的阅读笔记
  • spring security怎么解决用户的权限问题