💠 题目
LeetCode题目地址:leetcode-cn.com/problems/ro…
难度:中等
标签:双指针
、链表
给你一个链表的头节点 head
,旋转链表,将链表每个节点向右移动 k
**个位置。
示例 1:
输入: head = [1,2,3,4,5], k = 2
输出: [4,5,1,2,3]
示例 2:
输入: head = [0,1,2], k = 4
输出: [2,0,1]
提示:
- 链表中节点的数目在范围
[0, 500]
内 -100 <= Node.val <= 100
0 <= k <= 2 * 109
📙 解答
💥 方法一:
💡 解题思路
👟 复杂度
- ⏰ 时间复杂度:
- 🌍 空间复杂度:
💻 代码实现
public static ListNode rotateRight(ListNode head, int k) {
if (head == null || head.next == null) return head;
// 获取链表长度,以及最后一个节点
ListNode endNode = null;
int len = 0;
for ( ListNode p = head; p != null; p = p.next) {
endNode = p;
len ++;
}
// 计算实际要移动的节点个数
k = k % len;
if (k == 0) return head;
// 获取第len - K - 1位置的节点
ListNode p = head;
for (int i = 0; i < len - k - 1; i++) p = p.next;
// 交换节点
endNode.next = head;
head = p.next;
p.next = null;
return head;
}
🤔 优秀题解
旋转链表 | 图解链表 | 最清晰易懂的题解 【c++/java版本】
leetcode-cn.com/problems/ro…