news 2026/6/23 22:44:01

算法-k个一组翻转链表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法-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; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 22:38:25

云计算虚拟网络:VXLAN覆盖网络与SDN控制器架构

云计算虚拟网络&#xff1a;VXLAN覆盖网络与SDN控制器架构 随着云计算和大规模数据中心的快速发展&#xff0c;传统网络架构在灵活性和扩展性方面逐渐暴露出局限性。VXLAN&#xff08;Virtual Extensible LAN&#xff09;覆盖网络与SDN&#xff08;软件定义网络&#xff09;控…

作者头像 李华
网站建设 2026/6/23 22:24:32

无线电环境地图驱动无蜂窝MIMO网络能效优化实践

1. 项目概述&#xff1a;当网络“看得见”环境&#xff0c;能效革命就开始了 如果你正在为5G乃至未来6G网络的能耗问题头疼&#xff0c;或者你负责的校园、园区网络总感觉覆盖不均、热点区域卡顿、边缘地带信号弱&#xff0c;那么“无线电环境地图”这个概念&#xff0c;或许能…

作者头像 李华
网站建设 2026/6/23 22:21:08

Go CLI开发实战:用Cobra高效处理命令行参数与时间解析

1. 项目概述&#xff1a;为什么一个 CLI 工具包能成为 Go 生态的“事实标准”你写过命令行工具吗&#xff1f;不是那种go run main.go --port8080的原始写法&#xff0c;而是像kubectl get pods -n default那样带子命令、自动补全、内建帮助文档、支持-h和--help、还能生成 man…

作者头像 李华
网站建设 2026/6/23 22:19:06

rsync同步原理与生产级故障排查实战

1. 为什么 rsync 是同步场景里“最稳的那一个”在服务器运维、内容分发、开发环境镜像、甚至个人照片备份这类需求里&#xff0c;你几乎每天都会遇到同一个问题&#xff1a;怎么把本地的一堆文件&#xff0c;原样、高效、可中断、可验证地搬到另一台机器上&#xff1f;很多人第…

作者头像 李华
网站建设 2026/6/23 22:16:24

Ubuntu 18.04 部署 production-ready code-server 云 IDE 全指南

1. 项目概述&#xff1a;在 Ubuntu 18.04 上部署一个真正可用的 code-server 云 IDE你有没有过这样的时刻&#xff1a;临时需要调试一段 Python 脚本&#xff0c;但手边只有公司配的 Windows 笔记本&#xff0c;装不了 Docker&#xff0c;也连不上内网开发机&#xff1b;或者带…

作者头像 李华
网站建设 2026/6/23 22:14:08

Canvas碰撞检测防穿模:轨迹预判与线段-矩形求交实战

1. 项目概述&#xff1a;为什么碰撞检测不是“加个if判断”就完事了&#xff1f; Canvas API 做动画&#xff0c;很多人卡在第二关——碰撞。标题里这个“Basic Collisions”&#xff0c;听着像入门级内容&#xff0c;但实际动手时你会发现&#xff0c;它根本不是“判断两个圆心…

作者头像 李华