MCPcopy
hub / github.com/HuberTRoy/leetCode / reverseKGroup

Function reverseKGroup

Array/ReverseNodesInk-Group.js:21–99  ·  view source on GitHub ↗
(head, k)

Source from the content-addressed store, hash-verified

19// 循环这个操作。
20// 思路不难,个人感觉难点在于ListNode是在不好操作。
21var reverseKGroup = function(head, k) {
22 function getKNodes(head) {
23 let nodes = []
24 let newHead = head
25
26 //
27 while (nodes.length < k && newHead) {
28 nodes.push(newHead)
29 newHead = newHead.next
30 }
31
32 return nodes
33 }
34
35 function reverse(nodes) {
36 // 将nodes里的ListNode关系翻转
37 if (!nodes.length) {
38 return null
39 }
40
41 if (nodes.length === 1) {
42 return [nodes[0],null,null]
43 }
44
45 // 新开始的节点应为最后一个节点的下一个
46 let newStartNode = nodes[nodes.length - 1].next
47 // 最后一个节点是翻转前的第一个节点
48 let lastNode = nodes[0]
49
50 let rNodes = nodes.reverse()
51 // 翻转后的头节点是翻转后的最后一个节点。
52 let first = rNodes[0]
53 let indexF = first
54 for (let i of rNodes.slice(1)) {
55 i.next = null
56 indexF.next = i
57 indexF = i
58 }
59 // 返回新的头
60 // 和下次迭代应该开始新头,为原nodes[-1]的next
61 return [first, newStartNode, lastNode]
62
63 }
64
65 let first = getKNodes(head)
66
67 if (!first.length) {
68 return null
69 }
70
71 if (first.length < k) {
72 return head
73 }
74
75 let [newHead, newStartNode, lastNode] = reverse(first)
76 let indexNewHead = lastNode
77
78 // 循环翻转

Callers

nothing calls this directly

Calls 2

getKNodesFunction · 0.85
reverseFunction · 0.85

Tested by

no test coverage detected