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