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

LeetCode 92. 反转链表 II

LeetCode 92. 反转链表 II

给你单链表的头指针 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]
提示:
链表中节点数目为 n
1 <= n <= 500
-500 <= Node.val <= 500
1 <= left <= right <= n
进阶: 你可以使用一趟扫描完成反转吗?

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:if left == right:return headhead = first_start = ListNode(next=head)counter = 0while head:if counter < left - 1:head = head.nextelif counter == left - 1:first_end = headhead = head.nextelif counter == left:second_start = headpre = headhead = head.nextelif counter < right:tmp = head.nexthead.next = prepre = headhead = tmpelif counter == right:second_end = headthird_start = head.nexthead.next = prepre = None# 拼接first_end.next = second_endsecond_start.next = third_startreturn first_start.nextelse:breakcounter += 1

时间复杂度 O(n):一个大循环最多遍历链表完整一次,计O(n)。共O(n)。
空间复杂度 O(1):常量。共 O(1)。

还是官解写的简洁

class Solution:def reverseBetween(self, head: ListNode, left: int, right: int) -> ListNode:# 设置 dummyNode 是这一类问题的一般做法dummy_node = ListNode(-1)dummy_node.next = headpre = dummy_nodefor _ in range(left - 1):pre = pre.nextcur = pre.nextfor _ in range(right - left):next = cur.nextcur.next = next.nextnext.next = pre.nextpre.next = nextreturn dummy_node.next# 作者:力扣官方题解
# 链接:https://leetcode.cn/problems/reverse-linked-list-ii/solutions/634701/fan-zhuan-lian-biao-ii-by-leetcode-solut-teyq/
# 来源:力扣(LeetCode)
# 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Hi3861 OpenHarmony嵌入式应用入门--华为 IoTDA 设备接入
  • 堆、栈和队列(数据结构)
  • PGCCC|【PostgreSQL】PCA+PCP+PCM等IT类认证申报个税退税指南
  • 【mysql】02在ubuntu24安装并配置mysql
  • 【区块链 + 智慧政务】澳门:智慧城市建设之证书电子化项目 | FISCO BCOS应用案例
  • 单元测试有什么好处呢?
  • 【代码随想录_Day30】1049. 最后一块石头的重量 II 494. 目标和 474.一和零
  • SpringBoot集成Sharding-JDBC-5.3.0实现按月动态建表分表
  • 采用自动微分进行模型的训练
  • 睡前故事—绿色科技的未来:可持续发展的梦幻故事
  • 数据建设实践之大数据平台(五)安装hive
  • 企业网络实验(vmware虚拟机充当DHCP服务器)所有IP全部保留,只为已知mac分配固定IP
  • 从产品手册用户心理学分析到程序可用性与易用性的重要区别
  • 启智畅想火车类集装箱号码识别技术,软硬件解决方案
  • 新一代大语言模型 GPT-5 对工作与生活的影响及应对策略
  • 分享的文章《人生如棋》
  • AHK 中 = 和 == 等比较运算符的用法
  • flutter的key在widget list的作用以及必要性
  • HTTP中的ETag在移动客户端的应用
  • React组件设计模式(一)
  • vuex 学习笔记 01
  • 初识 beanstalkd
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 番外篇1:在Windows环境下安装JDK
  • 高性能JavaScript阅读简记(三)
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 关于springcloud Gateway中的限流
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 聊聊hikari连接池的leakDetectionThreshold
  • 微信开源mars源码分析1—上层samples分析
  • 在Mac OS X上安装 Ruby运行环境
  • Java数据解析之JSON
  • Python 之网络式编程
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​Python 3 新特性:类型注解
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #Java第九次作业--输入输出流和文件操作
  • $forceUpdate()函数
  • (~_~)
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (JS基础)String 类型
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (TOJ2804)Even? Odd?
  • (分布式缓存)Redis持久化
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (回溯) LeetCode 131. 分割回文串
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (一)基于IDEA的JAVA基础1
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m