跳到主要内容

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;
}