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

每k个节点一组反转链表

系列文章目录

文章目录

  • 系列文章目录
  • 一、思路


一、思路

每k个节点一组反转链表,最后节点不足k个的,保持不变
例如:

输入:1->2->3->4->5->6->7,k = 3
输出:3->2->1->6->5->4->7

思路:
使用虚拟头节点方便操作
每次处理一组k个节点
反转当前组内的节点
将反转后的组连接到前一部分
重复处理

class ListNode {int val;ListNode next;ListNode(int x) { val = x; }
}public class Solution {public ListNode reverseKGroup(ListNode head, int k) {// 虚拟头节点ListNode dummy = new ListNode(0);dummy.next = head;// prev 是当前组的前一个节点ListNode prev = dummy;while (true) {// 检查是否还有 k 个节点ListNode curr = prev.next;int count = 0;while (count < k && curr != null) {curr = curr.next;count++;}if (count < k) break; // 不足 k 个,停止// 反转当前组:从 prev.next 到 curr - 1ListNode first = prev.next;ListNode last = prev.next;for (int i = 0; i < k - 1; i++) {last = last.next;}// 反转区间 [first, last]ListNode nextGroup = last.next;ListNode prevNode = prev;ListNode currNode = first;// 反转 k 个节点for (int i = 0; i < k; i++) {ListNode next = currNode.next;currNode.next = prevNode;prevNode = currNode;currNode = next;}// 连接反转后的组prev.next = prevNode;first.next = nextGroup;// 更新 prev 为当前组的最后一个节点(即原来的第一个节点)prev = first;}return dummy.next;}// 测试代码public static void main(String[] args) {// 构建链表 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7ListNode node1 = new ListNode(1);node1.next = new ListNode(2);node1.next.next = new ListNode(3);node1.next.next.next = new ListNode(4);node1.next.next.next.next = new ListNode(5);node1.next.next.next.next.next = new ListNode(6);node1.next.next.next.next.next.next = new ListNode(7);Solution solution = new Solution();ListNode result = solution.reverseKGroup(node1, 3);// 打印结果while (result != null) {System.out.print(result.val + " ");result = result.next;}}
}
http://www.xdnf.cn/news/19472.html

相关文章:

  • 11 C 语言 sizeof 与指针实战指南:一维 / 二维数组计算注意事项 + 笔试真题解析 + sizeof strlen 对比
  • Python数据处理
  • MYSQL表结构优化场景
  • AI 赋能综合能源管理系统:开启智慧能源新时代
  • 深入理解 Rockchip 平台 DTS 中的 UART3 引脚配置
  • Web开发-JavaEE应用原生和FastJson反序列化URLDNS链JDBC链Gadget手搓
  • Photoshop - Ps 编辑图像
  • 深思熟虑智能体:基于 tencent youtu-agent 的五阶段投资研究系统
  • 第一个SpringBoot程序
  • 字数统计器和文本AI处理,非常好用
  • HBase高效并发锁:IdLock极简内存设计
  • 世界模型 World Models概述
  • 计算机算术8-浮点加法
  • uart学习
  • 基于FPGA的简易医疗呼叫器实现,包含testbench
  • 基于单片机智能垃圾桶/垃圾分类/语音垃圾桶
  • 内存模型(Memory Model)是什么?
  • 数据结构(顺序表力扣刷题)
  • 科技信息差(8.30)
  • GLM-Zero:智谱AI最新推出的AI深度推理模型
  • I2C多点触控驱动开发详解
  • shell脚本第五阶段---shell函数与正则表达式
  • 大模型训练中的 logits 是什么
  • react代码分割
  • 算法题(195):点名
  • WorkManager
  • BGP路由协议(四):工作原理
  • 银河麒麟Kylin系统安装各种板卡(反射内存卡、图像注入卡、串口卡等)步骤及解决方案
  • 微服务-ruoyi-cloud部署
  • 直流无刷电机2