当前位置:网站首页>K个一组翻转链表[链表拆解/翻转/拼装]
K个一组翻转链表[链表拆解/翻转/拼装]
2022-06-22 18:01:00 【REN_林森】
K个一组翻转链表
前言
对于链表操作而言,翻转链表是基础操作,而保证不断链是关键问题。不断链的本质就是把后面的被动节点先拼装上/用指针指着。
一、K个一组翻转链表

二、链表拆解/翻转/拼装
package everyday.hard;
public class ReverseKGroup {
/* target:把连续k个节点进行翻转。 选好k个节点,然后翻转,返回新的头节点。然后拼接上去。 */
public ListNode reverseKGroup(ListNode head, int k) {
ListNode dummyHead = new ListNode(0, head);
ListNode begin = dummyHead, p = dummyHead;
int cnt = 0;
while (p.next != null) {
cnt = 0;
while (cnt < k && p.next != null) {
p = p.next;
cnt++;
}
// 有五个节点,可以翻转。
if (cnt % k == 0) {
// 拿到翻转之后的尾节点。
ListNode newTail = begin.next;
// 记录剩下的链表部分,防止丢失。
ListNode next = p.next;
// 再把链表切断,并进行翻转。
p.next = null;
begin.next = reverseList(newTail);
//把后面的链表接上。
newTail.next = next;
// 更新新一轮的开始节点。
begin = p = newTail;
}
}
return dummyHead.next;
}
// 翻转链表并返回新的头节点。
private ListNode reverseList(ListNode l) {
ListNode dummyHead = new ListNode();
while (l != null) {
// 头插法
ListNode next = l.next;
l.next = dummyHead.next;
dummyHead.next = l;
// 走向下一个需要插入的节点。
l = next;
}
return dummyHead.next;
}
// 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;
}
}
}
总结
1)链表的翻转(头插法),多次刷题之后突然冒出的新写法。除此之外,以前喜欢用for循环/递归来改变链表方向也是可以的,只是注意一下返回新的头节点。
2)单向链表断链问题。
参考文献
边栏推荐
- Flutter2.0运行在web上不同渲染器的问题
- How MySQL deletes a column in a database table
- 线程池:ThreadPoolExcutor源码阅读
- C#,入门教程——关于函数参数ref的一点知识与源程序
- org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
- ssh免密码登录
- PostgreSQL 字符串分隔函数(regexp_split_to_table)介绍以及示例应用
- 3GPP 5G R17标准冻结,RedCap作为重要特性值得关注!
- Centeros install mangodb
- 5G 短消息解决方案
猜你喜欢

IPLOOK 5GC与亚信国际CHF(计费功能)对接成功

维智科技亮相西部数博会,时空AI技术获高度认可

Flutter series - build a flutter development environment

Niuke.com: judge whether it is palindrome string

Digital supply chain centralized purchase platform solution for mechanical equipment industry: optimize resource allocation and realize cost reduction and efficiency increase

缓存3种方式及原理

Active directory user logon Report
![jniLibs.srcDirs = [‘libs‘]有什么用?](/img/d5/3070f8e793507efc601bb22d5024fa.png)
jniLibs.srcDirs = [‘libs‘]有什么用?

机械设备行业数字化供应链集采平台解决方案:优化资源配置,实现降本增效

Flutter系列-搭建Flutter开发环境
随机推荐
UE4_ Ue5 make 3dui follow the camera orientation (attached works)
Play typical usage scenarios of kubernetes | dashboard for 5 minutes every day
Shell script explanation (IV) -- while loop and until loop of loop statements (additional examples and analysis)
上半年,这个领域竟出了7家新独角兽,资本争抢入局
IPLOOK 成为 RedHat(红帽)业务合作伙伴
线程池:ThreadPoolExcutor源码阅读
3GPP 5g R17 standard is frozen, and redcap as an important feature deserves attention!
Interview MySQL
codeup最长回文子串
Niuke network: minimum coverage substring
Thread pool: reading the source code of threadpoolexcutor
Service practice: use service to complete a download task
shell脚本详解(十)——sed编辑器的使用方法
How MySQL deletes a column in a database table
Niuke.com: consolidation interval
如何提高工作效率?苹果电脑效率工具合集
Redis中的布隆过滤器与布谷鸟过滤器,你了解多少?
贪心之区间问题(2)
2022 Chongqing preschool education industry exhibition 𞓜 hi tech Toy Puzzle decompression Toy Expo
一些技术想法: