当前位置:网站首页>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)单向链表断链问题。
参考文献
边栏推荐
- 同花顺好用么?手机开户安全么?
- shell脚本详解(十)——sed编辑器的使用方法
- 《被讨厌的勇气》读后感
- 如何更改Apple Watch上的表盘
- 2022 G2 power plant boiler stoker question bank and online simulation examination
- Active directory user logon Report
- PostgreSQL 字符串分隔函数(regexp_split_to_table)介绍以及示例应用
- STM32控制矩阵按键,HAL库,cubeMX配置
- 同花顺容易开户么?手机开户安全么?
- Niuke.com: judge whether it is palindrome string
猜你喜欢
![Programmer's tool encyclopedia [continuous update]](/img/7e/b7fbc030f4bbded3ee6188360d7d54.png)
Programmer's tool encyclopedia [continuous update]

Play typical usage scenarios of kubernetes | dashboard for 5 minutes every day

IPLOOK作为O-RAN联盟会员,将共同促进5G产业发展

Paopao Mart: empty souls need stories

加工制造业智慧采购系统解决方案:助力企业实现全流程采购一体化协同

How much do you know about the bloom filter and cuckoo filter in redis?

Problems of different renderers running on the web with flutter2.0

Shell script explanation (II) -- conditional test, if statement and case branch statement

shell脚本详解(四)——循环语句之while循环和until循环(附加例题及解析)

5GC和卫星融合通信方案
随机推荐
Active Directory用户登录报告
Some technical ideas:
如何提高工作效率?苹果电脑效率工具合集
Service实战:使用Service完成一个下载任务
Exness sorted out three problems to be solved in Musk's acquisition of Twitter
5gc and satellite integrated communication scheme
Shell script explanation (VII) -- regular expression, sort, uniq, tr
有效的括号
Play typical usage scenarios of kubernetes | dashboard for 5 minutes every day
How MySQL deletes a column in a database table
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
TypeScript(7)泛型
上半年,这个领域竟出了7家新独角兽,资本争抢入局
std::enable_shared_from_this 错误:error: expected template-name before ‘<’ token
5G 短消息解决方案
数商云:数字化供应链系统搭建,赋能企业实现物流供应链的优化升级
下拉刷新及上拉加载更多的ListView
Robotframework installation tutorial
数商云:解析B2B2C多用户商城系统架构设计思路,开启智能商城新时代
使能伙伴,春节重大保障“不停歇”