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

Leetcode-25.K个一组翻转链表

核心还是掌握链表的反转

image.png

# Definition for singly-linked list.# class ListNode:#     def __init__(self, val=0, next=None):#         self.val = val#         self.next = nextclass Solution:def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:dummy=ListNode(0,head)pre=dummywhile True:end =prefor _ in range(k):end=end.nextif not end:return dummy.nextstart=pre.nextnext_group=end.nextcur=startprev=next_groupwhile cur!=next_group:nxt=cur.nextcur.next=prevprev=curcur=nxtpre.next=endpre=startreturn dummy.next

1. 整条链表反转(一次性从头到尾)

经典的三指针法:

  • prev:保存反转后部分的头(初始为 None

  • curr:当前正在处理的节点

  • next(或 nxt):提前保存 curr.next,防止链表断开

反转过程:

prev = None curr = head while curr:     nxt = curr.nextcurr.next = prev  prev = curr    curr = nxt

✅ 只要 3 个指针 就够,空间 O(1)。


2. 反转一段子链(已知子链的首尾)

除了 prev/curr/nxt 三个工作指针,还要额外 2 个锚点

  • sub_prev:子链前驱(前一段的尾)

  • sub_next:子链后继(后一段的头)

反转步骤:

  1. sub_prevsub_next 把子链分离出来

  2. prev/curr/nxt 反转子链

  3. 反转完接回 sub_prev → 新头新尾 → sub_next

✅ 这里需要 3 个工作指针 + 2 个锚点 = 5 个指针


3. K 个一组反转

这是你现在问的情况,步骤是:

  1. pre 找到本组前驱

  2. end 找到本组尾巴(走 k 步)

  3. next_group = end.next 保存下一组的起点

  4. prev/curr/nxt 反转 [start, end]

  5. 反转完接回并让 pre 移到新尾(原来的 start)

常用指针:

  • 跨组锚点:preendnext_group(3 个)

  • 反转工作:prevcurrnxt(3 个)

✅ 总共 固定 6 个指针,不随 k 增加而增加。

http://www.dtcms.com/a/326710.html

相关文章:

  • 【13-向量化-高效计算】
  • 第二十一天:统计数字
  • 嵌入式系统学习Day16(C语言中的位运算)
  • 绿巨人VS Code多开项目单独管理每个项目单独使用一个不限制的augment
  • 构建AI代理工作流的开源利器——Sim Studio
  • 文件编辑html
  • C语言命令行参数
  • 北京JAVA基础面试30天打卡07
  • 【C++竞赛】核桃CSP-J模拟赛题解
  • 提示词工程实战:用角色扮演让AI输出更专业、更精准的内容
  • vagrant和itamae怎么配合使用? (放弃)
  • 33Nginx模块的从配置与优化
  • 如何使用curl编程来下载文件
  • MacBook 本地化部署 Dify 指南
  • AIDL简单使用
  • 【接口自动化测试】---YAML、JSON Schema
  • 逐际动力开源运控 tron1-rl-isaacgym 解读与改进
  • VMD例程(Matlab 2021b可直接使用)
  • 从“目标烂尾”到“100%交付”:谷歌OKR追踪系统如何用“透明化+强问责”打造职场责任闭环
  • 小白入门指南:Edge SCDN 轻松上手
  • Dify 从入门到精通(第 28/100 篇):Dify 的多租户架构
  • 【学习嵌入式day-21-Linux编程-shell命令】
  • 第九篇:调试工具:Three.js Inspector使用
  • 武汉火影数字|VR大空间是什么?如何打造VR大空间项目
  • 【华为机试】648. 单词替换
  • SciChart图形库应用
  • 专题:2025人形机器人与服务机器人技术及市场报告|附130+份报告PDF汇总下载
  • TCGA数据集下载工具gdc-client下载慢解决方案
  • mysql参数调优之 innodb_buffer_pool_size和innodb_buffer_pool_instances (三)
  • Java AI生成长篇小说的实用