LeetCode刷题-25.K个一组翻转链表
题目链接:25.K个一组翻转链表
¶题解:
两两一组升级为 k 个一组!
参考上一篇两两一组的解法,基本一致!
¶题目简述:
给定一个链表,k个一组进行倒序反转!
¶题解一:我的 --> 乱
嗯,不推荐看这个,虽然我自己写的也AC了,但是着实有点乱,有点多,不条理。非常建议直接看题解二:更加清晰!
接下来介绍一下我的乱乱的思路:
-
特判一下k为1的情况,直接返回即可
-
先通过
pt
指针循环找到第k个节点。用b
指针指向第k个节点。用a
指针指向第一个节点。(如果存在) -
如果不够第k个节点,直接返回。
-
用
t
指向第二个节点,p
指向第k
个节点b
-
使用循环将第二个节点到第k个节点全部反向指一下。
-
使用
s
指针指向第k个节点到第二个节点。 -
使用
b
来反向连接 -
t->next = a
:第二个指向第一个 -
p = a
:p指向a
。。。。其实画个图还是很明白的,我懒得画了,毕竟有点乱!
强烈建议看题解二!
¶AC代码一:(复杂,不调理,易错)
1 |
|
¶题解二:别人的 --> 清晰
同样:和两个一组反转类似,同样使用a、b
指向第一个和第二个,多了一个c
指向第三个,防止找不到下一个。
使用q
来判断存不存在第k个节点。
内部的for
循环用来将第1个到第k个节点反转链接。a、b
顺次后移,如下图的第一二步:
然后让p
指向第k个节点a
,让外部的c
(始终指向第一个节点,即转换后的最后一个节点)指向第k个节点的下一个,即下一组的开始。然后p节点后移,指向下一组节点的上一个节点c
具体如图所示:看图更易于理解!
¶AC代码二:(清晰)
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小牛博客!
评论