LeetCode-61-旋转链表
题目
给你一个链表的头节点 head
,旋转链表,将链表每个节点向右移动 k
个位置。
示例 1:
1 | 输入:head = [1,2,3,4,5], k = 2 |
示例 2:
1 | 输入:head = [0,1,2], k = 4 |
提示:
- 链表中节点的数目在范围
[0, 500]
内 -100 <= Node.val <= 100
0 <= k <= 2 * 109
题解
这一题我的解法时间复杂度打败100%,空间复杂度才5%,但是感觉还是一个很不错的解法,比较相对来讲,时间复杂度更重要一点。(叉腰.jpg)
思路很简单,遍历k次,每次把最后一个节点头插法放到第一个去就可以了。
那么就会遇到第一个问题,比如旋转20000次,超时啦!怎么解决呢?
也很简单,我们只要知道了链表长度,然后k = k % len
即可!因为如果旋转了len
次,相当于没有变!
怎么获得len
呢?也简单,先遍历一遍好了。这样的时间复杂度也很优秀!
在处理的时候,最好还是在当前指针cur
搞一个前指针curFront
,再断最后一个节点的时候很方便!此外一个哑节点dummy
可以在头插法的时候很简便!
1 | class Solution { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Excelius's World!