61.旋转链表
链接:61.旋转链表
难度:Medium
标签:链表、双指针
简介:给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
题解 1 - typescript
- 编辑时间:2021-03-06
- 执行用时:84ms
- 内存消耗:39.7MB
- 编程语言:typescript
- 解法介绍:拼接头尾后直接计算新头位置。
function rotateRight(head: ListNode | null, k: number): ListNode | null {
  if (head === null) return null;
  let count = 1;
  let temp = head;
  while (temp.next !== null) {
    count++;
    temp = temp.next;
  }
  temp.next = head;
  temp = head;
  count = count - (k % count);
  while (--count) temp = temp.next!;
  const newHead = temp.next;
  temp.next = null;
  return newHead;
}
题解 2 - typescript
- 编辑时间:2021-03-27
- 执行用时:96ms
- 内存消耗:39.8MB
- 编程语言:typescript
- 解法介绍:首位相连后判断位置进行断链。
function rotateRight(head: ListNode | null, k: number): ListNode | null {
  if (head === null) return null;
  let p: ListNode | null = head;
  let c = 1;
  while (p.next !== null) {
    p = p.next;
    cpp;
  }
  p.next = head;
  c = c - (k % c);
  while (--c) head = head!.next;
  p = head!.next;
  head!.next = null;
  return p;
}