[路飞] 07——leetcode-[61] 旋转链表

127 阅读1分钟

61. 旋转链表

给你一个链表的头节点 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

代码实现

/*
 * @lc app=leetcode.cn id=61 lang=javascript
 *
 * [61] 旋转链表
 */

// @lc code=start
/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} k
 * @return {ListNode}
 */
var rotateRight = function(head, k) {
  // 判断节点是否是空的节点
  if (!head) return null;
  // 找到链表的尾节点,穿成环, 获取到列表的长度
  let cur = head, size = 1;
  while (cur.next) cur = cur.next, size += 1;
  cur.next = head;
  // 找到第size-k个节点,然后将他断开
  for (let i = 0; i < size - k % size - 1; i++) {
    head = head.next;
  }
  cur = head.next;
  head.next = null
  return cur;
};
// @lc code=end