
每天AC系列(十二):K个一组翻转链表
首先,用一个指针t表示要插入的位置的前驱,一边把head移动k遍,一边插入在t后面(下图假设k=3):
t的新位置为未插入head之前的head的位置,因此在插入之前把head的位置保存下来,直接使t移动到该位置,head的位置为自然移动到的位置,不需改变。
这时就需要i发挥作用了,i表示已翻转的节点的值,因为只是一次遍历,每遍历k次便翻转k次,若i小于k,由于已经翻转了剩下的i个节点,因此需要再将这剩下的i个节点翻转一次:
发布日期:2021-05-06 22:56:11
浏览次数:25
分类:精选文章
本文共 1258 字,大约阅读时间需要 4 分钟。
1 题目
,每K个节点一组进行翻转,剩下不足K个的保留原状.

2 直接翻转
将链表分成三部分,已翻转,待翻转,未翻转三部分:


int i=0;for(;i
直接插在t的后面,一轮循环之后,移动t与head.

ListNode nextTPosition = head;ListNode temp;int i=0;for(;i
接着再翻转,到达7后,7不需要翻转,因为剩下的节点数不足:

if(i == k) t = nextTPosition;else{ for(head = t.next,t.next=null;head!=null;) { temp = head.next; head.next = t.next; t.next = head; head = temp; } break;}
对剩下的i个节点再次翻转时,不需要修改t的位置,使head指向t.next,再把t.next置为null,因为此时t为
4->7
若不把t.next置为null,在
head.next = t.next
这一步会使head.next指向错误的t.next,导致会在最后一个节点不断循环。
翻转最后的i个节点后,跳出循环,返回结果。
3 递归
递归的话思路也类似,遍历k次,翻转k个,若还有需要翻转的节点,递归翻转,若没有,翻转剩下的i个节点。
if(i == k) t.next = reverse(head,k);
大部分代码与循环相同就不贴了,最大的不同是这里,这里的t为原来未遍历前的head,因为改成递归后,不需要使用t作为移动的指针指示插入的位置,t.next就相当于翻转后的最后一个节点,把递归的结果插入到这个节点的后面。

4 使用额外空间–栈
因为题目规定只能使用常数的额外空间,因此应该只有这两种方法了,但是,如果允许使用额外的空间,可以使用栈优化直接翻转的算法。
因为出栈的次序正是翻转的顺序,每遍历k个节点就压栈k个节点,若剩余不足k个节点,把head连上dummy,若还有多余的节点或者刚好遍历完,把出栈的节点依次连上主链。
while(true){ Stacks = new Stack<>(); ListNode temp = head; int i=0; for(;i
其中for循环为遍历压栈,i==k判断是否翻转链表。
5 源码
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年03月30日 05时50分27秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
数据结构第八节(图(下))
2019-03-06
基础篇:异步编程不会?我教你啊!CompletableFuture
2019-03-06
基于Mustache实现sql拼接
2019-03-06
气球游戏腾讯面试题滑动窗口解法
2019-03-06
POJ 2260 Error Correction 模拟 贪心 简单题
2019-03-06
POJ - 1328 Radar Installation 贪心
2019-03-06
CSUOJ Water Drinking
2019-03-06
自定义博客园博客的背景图片
2019-03-06
Spring MVC+javamail实现邮件发送
2019-03-06
Asp.NET Core 限流控制-AspNetCoreRateLimit
2019-03-06
gRPC在 ASP.NET Core 中应用学习(一)
2019-03-06
@SuppressWarnings 用法
2019-03-06
看完你就明白的锁系列之锁的状态
2019-03-06
看完这篇操作系统,和面试官扯皮就没问题了
2019-03-06
我的价值观
2019-03-06
真香!Linux 原来是这么管理内存的
2019-03-06
一文详解 Java 并发模型
2019-03-06
阅站无数!不过我只推荐下面这些
2019-03-06
值类型与引用类型(中)
2019-03-06
MSSQL 2005 数据库变成可疑状态
2019-03-06