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

算法-k个一组翻转链表

题目

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

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

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

示例 1:

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

题解

思路一

用双向链表解决该问题

/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode reverseKGroup(ListNode head, int k) { LinkedList<ListNode> link = new LinkedList<ListNode>(); ListNode cur = head; int count = 0; ListNode root = new ListNode(); ListNode r = root; while (cur != null) { while (cur != null && count < k) { ListNode temp = cur.next; cur.next = null; link.add(cur); cur = temp; count++; } while (link.size() > 0) { ListNode node; if(count == k){ node = link.removeLast(); }else { node = link.removeFirst(); } node.next = r.next; r.next = node; r = node; } count = 0; } return root.next; } }

思路二

用双向链表解决该问题,需要使用o(k)的辅助空间,实际上用常量的空间复杂度就可以解决该问题

/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode reverseKGroup(ListNode head, int k) { ListNode groupHead = new ListNode(); ListNode root = groupHead; ListNode tail = head; ListNode cur = head; int count = 0; while (cur != null) { ListNode temp = cur.next; cur.next = groupHead.next; groupHead.next = cur; cur = temp; count++; if (count == k) { count = 0; //回到尾节点 groupHead = tail; //重新设置下一次的为节点 tail = cur; } } if (count != 0) { cur = groupHead.next; groupHead.next = null; while (cur != null) { ListNode temp = cur.next; cur.next = groupHead.next; groupHead.next = cur; cur = temp; } } return root.next; } }
http://www.jsqmd.com/news/1069541/

相关文章:

  • 下班回家还要挑灯检查作业?这款AI作业批改工具,把家长从“修行”中解放了
  • LAC容器化授权困境(下篇):K8s环境下的授权锚定实战
  • 机器学习入门:逻辑回归原理、损失函数与梯度下降推导
  • C.3 DRM/TTM 灵魂拷问 100 问: 解释下 AMDGPU_GEM_CREATE_VRAM_CLEARED 标志的作用和实现原理
  • 计算机毕业设计之基于jsp新能源汽车租赁系统
  • 适合小白的嵌入式软件项目(C++)详解-----卡码缓存系统(二)实现最简单缓存
  • 新e选烤火罩异味[主面料] QB/T 4045—2010 5.8 判定符合检测标准与测试条件
  • 使用langchain4j遇到的难题(暂记)
  • 无人机电力营销落地瓶颈深度解析|四大核心壁垒、运维营销业务差异化、实景落地案例、全套YOLOv8电力AI视觉工程实现
  • 从零剖析十路充电桩嵌入式源码----软件开发环境搭建【3.1】
  • ivs-nat与nginx四层代理区别
  • eclipse设置豆沙绿背景色
  • 做 excel 表格用哪个智谱清言软件文档导出,AI 导出鸭专业适配表格导出,结构精准无需手动调整
  • 字符串的格式化问题 字符串的常规操作
  • deepspeed,vllm,llamafactory的使用
  • Kimi Work 来了:月之暗面发布桌面 Agent,知识工作者的“Vibe Working“时代开启
  • AI 时代,每个人都需要构建自己的操作系统
  • 【流形学习多模态语言变量分析基础】王阳明代数讲义之元认知透镜
  • 杰理ac791 wifi_camera 工程排坑手册
  • 云耀计算AI-Claura,在树莓派运行的AI
  • 【AI应用实战-WorkBuddy】工作流搭建:从需求到自动化全流程(十三)
  • 第二章 数字类型及其操作3
  • IntelliGit 项目个人工作总结
  • 模型配置篇(子篇)《DeepSeek API Key 获取实操指南:手把手教你拿到“大龙虾”的通行证》
  • 计算机毕业设计之村级技能培训管理系统
  • 微分几何中的等参超曲面与焦点流形稳定性分析
  • 从 Receiver Agreement 看懂 SAP PI/PO 出站路由的最后一公里
  • 秋招倒计时两个月,AI能力要从“会用工具”变成“能讲案例”
  • 为什么很多公司禁用 MyBatis 二级缓存?看完你就不敢乱开了
  • Python 3正则表达式完全指南:从入门到精通