旋转链表
- 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
示例 1:
输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]
解题思路
要将链表每个节点向右移动 k 个位置:
- 计算链表长度:首先遍历链表以获取其长度 n。
- 计算有效移动次数:因为旋转长度超过链表长度时会回到原点,所以有效的移动次数为 k % n。
- 找到新的链表头和尾:
新的链表尾在从头开始的第 (n - k % n - 1) 个节点。
新的链表头在从头开始的第 (n - k % n) 个节点。 - 断开并连接链表:将新尾节点的 next 指针设为 null,将旧的尾节点的 next 指向旧的头节点,形成一个新的链表。
Java实现
public class RotateRightLinked {
public static class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x; }
}
public ListNode rotateRight(ListNode head, int k) {
if (head == null || head.next