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 许可协议。转载请注明来自 小牛博客!
评论



