-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy path25-Reverse-Nodes-in-k-Group.js
61 lines (50 loc) · 1.3 KB
/
25-Reverse-Nodes-in-k-Group.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// 25. Reverse Nodes in k-Group [Hard]
// https://leetcode.com/problems/reverse-nodes-in-k-group/
/* eslint-disable no-undef */
/**
* 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}
*/
const reverseKGroup = (head, k) => {
if (k === 1) return head;
const arr = createArrayFromListNode(head);
let res = [];
for (let i = 0; i < arr.length; i += k) {
const temp = arr.slice(i, i + k);
if (temp.length === k) res = [...res, ...temp.reverse()];
else res = [...res, ...temp];
}
return createListNodeFromArray(res);
};
function createArrayFromListNode(node) {
const arr = [];
let current = node;
while (current) {
arr.push(current.val);
current = current.next;
}
return arr;
}
function createListNodeFromArray(arr) {
let temp = null;
let node = null;
for (let i = arr.length - 1; i >= 0; i--) {
const num = arr[i];
if (!node) {
node = new ListNode(num);
} else {
temp = new ListNode(arr[i]);
temp.next = node;
node = temp;
}
}
return node;
}