LeetCode刷题,旋转链表(61)

1,608 阅读1分钟

旋转链表

给你一个链表,将链表的每个节点向右移动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;
};