-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path025_reverse-nodes-in-k-group.js
52 lines (51 loc) · 1.19 KB
/
025_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
var reverseKGroup = function(head, k) {
let headPrev = new ListNode(-1)
headPrev.next = head
let prev = headPrev, p = head, pList = new Array(k)
while (p) {
let i = 0
for (; i < k; ++i) { // prev, ...pList, next
if (p) {
pList[i] = p
p = p.next
} else {
break
}
}
if (i === k) {
let next = pList[pList.length - 1].next
prev.next = pList[pList.length - 1]
for (let j = pList.length - 1; j > 0; --j) {
pList[j].next = pList[j-1]
}
prev = pList[0] // prepare prev for next while loop
pList[0].next = next
}
}
return headPrev.next
};
// test tools
function ListNode(val) {
this.val = val;
this.next = null;
}
function printLinkList(head) {
let pointer = head, arr = []
while (pointer) {
arr.push(pointer.val)
pointer = pointer.next
}
arr.push('NULL')
console.log(arr.join(' -> '))
}
// test case init | 注意:头指针指向第一个节点(而非头指针的next)
let head = new ListNode(1)
let pointer = head
for (let i = 2; i < 11; ++i) {
pointer.next = new ListNode(i)
pointer = pointer.next
}
printLinkList(head)
// test
head = reverseKGroup(head, 3)
printLinkList(head)