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

k个一组翻转链表

给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。

k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

示例 1:

输入:head = [1,2,3,4,5], k = 2
输出:[2,1,4,3,5]

示例 2:

输入:head = [1,2,3,4,5], k = 3
输出:[3,2,1,4,5]

提示:

  • 链表中的节点数目为 n
  • 1 <= k <= n <= 5000
  • 0 <= Node.val <= 1000

代码实现:

var reverseKGroup = function(head, k) {// 检查是否有k个节点let count = 0;let curr = head;while (curr && count < k) {curr = curr.next;count++;}// 不足k个,直接返回if (count < k) return head;// 反转前k个节点let prev = null;let current = head;for (let i = 0; i < k; i++) {let next = current.next;current.next = prev;prev = current;current = next;}// 递归处理剩余部分并连接head.next = reverseKGroup(current, k);return prev;
};

1.变量含义

  • prev:反转后新链表的头节点

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

  • next:临时保存下一个节点,防止断链

2.检查是否有k个节点

链表: 1→2→3→4→5, k=2
初始: curr=1→2→3→4→5, count=0
循环1: curr=2→3→4→5, count=1 (count<2,继续)
循环2: curr=3→4→5, count=2 (count=2,不满足count<2,停止)结果: count=2 (等于k),可以反转

3.链表翻转

head = [1,2,3]k = 2 为例

初始:

节点1 → 节点2 → 节点3 → null
↑       ↑
current current.next
prev: null

第一次循环:

let next = current.next;    // next: 2 → 3 → null
current.next = prev;        // current: 1 → null
prev = current;             // prev: 1 → null  
current = next;             // current: 2 → 3 → null

第二次循环:

let next = current.next;    // next: 3 → null
current.next = prev;        // current: 2 → 1 → null
prev = current;             // prev: 2 → 1 → null
current = next;             // current: 3 → null

结果:

prev: 2 → 1 → null        (反转后的前2个节点)
current: 3 → null         (剩余的未处理节点)  
head: 1 → null           (原来的头节点现在是反转组的尾节点)

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

相关文章:

  • Super分区和动态分区
  • 2026华清远见新品发布会:聚焦人工智能嵌入式物联网,打造“虚实融合•软硬协同“智能化教育新生态!
  • 09 - spring security加载流程
  • 【大前端】Android:读取剪切板与禁用剪切板复制功能(完整指南)
  • 第18讲 机器学习与深度学习
  • 数据结构 05(线性:栈和队列)
  • RAG系统嵌入模型怎么选?选型策略和踩坑指南
  • 机器学习 vs. 动力学模型,Ai2 最新研究:仅需 2 分钟,ACE2 可完成一次 4 个月季节预报
  • RNN循环神经网络详解
  • 【Nginx开荒攻略】深入解析Nginx进程管理与信号控制:从原理到实战
  • MySQL与Redis面试问题详解
  • 鸿蒙Next IPC Kit详解:构建高效进程间通信的完整指南
  • 【开题答辩全过程】以 基于springboot的高校疫情防控系统为例,包含答辩的问题和答案
  • Centos7 命令行使用nmcli重置网络配置
  • 如何计算sequence粒度的负载均衡损失
  • 学财税大数据应用,需要考CPA/税务师吗?
  • RAG全栈技术——文档加载器
  • 如何理解Service Mesh(服务网格)
  • android9适配camera gc02m1
  • 【十天成长计划】BoostKit初级班 开班啦!——陪伴式学习,阶梯式成长
  • 【图文详解】强化学习核心框架、数学基础、分类、应用场景
  • Rust简介
  • golang和rust内存分配策略
  • 简历项目之无人机图像目标识别
  • pantherx2 armbian librga-rockchip librga.so 编译安装方法
  • 【精品资料鉴赏】189页工程车辆集团数字化转型SAP解决方案
  • 算法 --- 多源 BFS
  • 15.Linux 硬盘分区管理
  • 2.UE-准备环境(二)-下载虚幻引擎源码和搞成vs项目并使用vs打开
  • G-Star公益行获评CCF优秀技术公益案例,用开源技术传递善意