旋转链表
给你一个链表,将链表的每个节点向右移动k位。
解题代码
解题思路找到链表尾节点,将链表串成环,依次移动k个节点
var rotateRight = function(head, k) {
if (!head) return null;
let n = 1; // 记录链表长度
let p = head; // 记录头结点
while (p.next) {
p = p.next;
n += 1;
}
p.next = head; // 连接上头节点,变成循环链表
k %= n; // 如果k数字很大,所以会循环很多圈。此时直接与掉链表长度。
k = n - k; // 最后减掉k 就是最终走多少步的同样效果。
while (k--) p = p.next; //移动k位链表
head = p.next; // 移动之后,把循环的链表赋值给头结点
p.next = null; // 将循环链表的尾节点断掉,就是移动k位之后的链表
return head;
};