题目:[61. 旋转链表]
题目描述
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k **个位置。
运行效率
代码如下
class ListNode {
val: number;
next: ListNode | null;
constructor(val?: number, next?: ListNode | null) {
this.val = val === undefined ? 0 : val;
this.next = next === undefined ? null : next;
}
}
function rotateRight(head: ListNode | null, k: number): ListNode | null {
let pre = head;
let end = head;
let i = 0;
while (end && i < k) {
i++;
end = end.next;
}
if (end === null) {
k = k % i;
i = 0;
end = head;
while (end && i < k) {
i++;
end = end.next;
}
}
if (!end) return null;
while (end.next) {
pre = pre.next;
end = end.next;
}
end.next = head;
head = pre.next;
pre.next = null;
return head;
}
function getLinkList(arr: number[]) {
const root = new ListNode();
let temp = root;
arr.forEach((item) => {
temp.next = new ListNode(item);
temp = temp.next;
});
return root.next;
}
const root = getLinkList([0, 1, 2]);
const troot = rotateRight(root, 4);
debugger;