news 2026/6/10 14:29:02

hot100 25.K个一组翻转链表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
hot100 25.K个一组翻转链表

思路:

1.链表分为已翻转部分 + 待翻转部分 + 未翻转部分。

2.每次翻转前,要确定翻转链表的范围,通过k次循环来确定。

3.需要记录翻转链表的前驱和后继,方便翻转完成后把已翻转和未翻转的部分连接起来。

4.初始时需要两个变量pre和end,pre表示待翻转链表的前驱,end表示待翻转链表的末尾。

5.经过k次循环,end到达末尾,记录待翻转链表的后继next = end.next。

6.翻转链表,然后将三部分链表连接起来,然后重置pre和end指针,然后进入下一次循环。

7.特殊情况:当翻转部分的长度不足k时,在定位end完成后,end == null,已经到达末尾,说明题目已经完成,直接跳出循环return即可。

复杂度分析:

1.时间复杂度:O(n*K),最好的情况为O(n),最差的情况为O(n^2)。

2.空间复杂度:O(1)。除了几个必须的节点指针外,没有占用额外空间。

附代码:

class Solution { public ListNode reverseKGroup(ListNode head, int k) { ListNode sentinel = new ListNode(0); //初始化哨兵节点 sentinel.next = head; ListNode pre = sentinel; //pre表示当前待翻转区间的前一个节点 ListNode end = sentinel; //end表示当前待翻转区间的最后一个节点 while(end.next != null){ for(int i = 0;i < k && end != null;i++){ end = end.next; //每k个节点一组 } if(end == null){ break; //剩余节点不足k个,直接退出 } ListNode start = pre.next; //start表示当前组的第一个节点 ListNode next = end.next; //next表示下一组的第一个节点 end.next = null; //断开当前组与下一组的连接 //翻转当前组 pre.next = reverse(start); //pre连接到翻转后的新头 start.next = next; //当前组的第一个节点连接下一组的第一个节点,即翻转后的尾连接到下一组的头 pre = start; //pre移动到当前组的尾部 end = pre; //end同步到pre位置 } return sentinel.next; } //翻转链表 private ListNode reverse(ListNode head){ ListNode pre = null; ListNode cur = head; while(cur != null){ ListNode tmp = cur.next; cur.next = pre; pre = cur; cur = tmp; } return pre; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 10:53:33

通达信主力控盘雷达 源码

{}VAR1:CLOSE-LOW; VAR2:HIGH-LOW; VAR3:CLOSE-HIGH; VAR4:IF(CLOSE>0,(VAR1/VAR2VAR3/VAR2)*VOL,(VAR3/VAR2VAR1/VAR2)*VOL); 主力控盘雷达: SUM(VAR4,10)/10000, VOLSTICK;{} 增减力度:(MA(CLOSE,34.000) - CLOSE) / MA(CLOSE, 34.000) * 10.000,COLOR6666FF; STICKLINE(C…

作者头像 李华
网站建设 2026/6/10 10:52:49

2026最新软件测试面试题(一)

1.测试人员在测试中的任务是什么&#xff1f; 1.尽可能早的找出系统中的bug&#xff1b; 2.避免软件开发过程中缺陷的出现&#xff1b; 3.衡量软件的品质&#xff0c;保证系统的质量&#xff1b; 4.关注用户的需求&#xff0c;并保证系统符合用户需求。 总的目标是&#xff1a…

作者头像 李华
网站建设 2026/6/9 17:26:44

金融风控模型的鲁棒性验证:软件测试从业者的实践指南

一、引言&#xff1a;鲁棒性验证的核心意义&#xff08;总&#xff09; 在金融科技领域&#xff0c;风险控制模型&#xff08;如信用评分、欺诈检测&#xff09;是保障系统稳定性的核心。鲁棒性验证&#xff08;Robustness Verification&#xff09;指模型在异常输入、数据扰动…

作者头像 李华
网站建设 2026/6/10 10:54:30

13、Vue2 与 Vue3 Diff 算法深度解析

目录 1. Vue2 Diff 算法原理&#xff08;双端比较&#xff09; 1.1 核心思想 1.2 源码位置 1.3 sameVnode 判断逻辑 1.4 双端比较流程图解 初始状态 五种比较策略 1.5 完整执行流程演示 1.6 Key 映射查找流程&#xff08;第 5 种情况&#xff09; 2. Vue3 Diff 算法原…

作者头像 李华
网站建设 2026/6/10 10:56:19

padding不生效

.line-side { width: 100%; height: 1px; background: rgba(255, 255, 255, 0.15); margin-top: 80px; padding: 0 114px; box-sizing: border-box; background-clip: content-box; //加这行代码 }

作者头像 李华
网站建设 2026/6/10 10:52:50

Floorp Browser(基于Firefox火狐浏览器)

Floorp Browser 是一款基于 Firefox 开发的开源网页浏览器&#xff0c;它继承了 Firefox 的安全性和隐私保护特性&#xff0c;并在此基础上进行了性能优化和功能增强。Floorp 旨在为用户提供一个快速、高效且注重隐私的浏览体验&#xff0c;适用于那些希望在浏览网页时能够更好…

作者头像 李华