@@ -65,7 +65,7 @@ curr = temp;
6565![ reverse k nodes in linked list] ( ../assets/problems/25.reverse-nodes-in-k-groups-2.PNG )
6666
6767
68- > ** NOTE** : 一般情况下对链表的操作,都有可能会引入一个新的` dummy node ` ,因为` head ` 有可能会改变。这里` head 从1->3 ` ,
68+ > ** NOTE** : 一般情况下对链表的操作,都有可能会引入一个新的` dummy node ` ,因为` head ` 有可能会改变。这里` head 从1->3 ` ,
6969` dummy (List(0)) ` 保持不变。
7070
7171#### 复杂度分析
@@ -78,7 +78,7 @@ curr = temp;
78783 . 对每一组进行翻转,更换起始和最后的位置
79794 . 返回` dummy.next ` .
8080
81- ## 代码 (` Java/Python3 ` )
81+ ## 代码 (` Java/Python3/javascript ` )
8282* Java Code*
8383``` java
8484class ReverseKGroupsLinkedList {
@@ -88,7 +88,7 @@ class ReverseKGroupsLinkedList {
8888 }
8989 ListNode dummy = new ListNode (0 );
9090 dummy. next = head;
91-
91+
9292 ListNode start = dummy;
9393 ListNode end = head;
9494 int count = 0 ;
@@ -105,21 +105,21 @@ class ReverseKGroupsLinkedList {
105105 }
106106 return dummy. next;
107107 }
108-
109- /**
108+
109+ /**
110110 * reverse linked list from range (start, end), return last node.
111- * for example:
111+ * for example:
112112 * 0->1->2->3->4->5->6->7->8
113113 * | |
114114 * start end
115- *
115+ *
116116 * After call start = reverse(start, end)
117- *
117+ *
118118 * 0->3->2->1->4->5->6->7->8
119119 * | |
120120 * start end
121121 * first
122- *
122+ *
123123 */
124124 private ListNode reverse (ListNode start , ListNode end ) {
125125 ListNode curr = start. next;
@@ -157,7 +157,7 @@ class Solution:
157157 else :
158158 end = end.next
159159 return dummy.next
160-
160+
161161 def reverse (self , start , end ):
162162 prev, curr = start, start.next
163163 first = curr
@@ -168,7 +168,49 @@ class Solution:
168168 curr = temp
169169 start.next = prev
170170 first.next = curr
171- return first
171+ return first
172+ ```
173+
174+ * javascript code*
175+ ``` js
176+ /**
177+ * @param {ListNode} head
178+ * @param {number} k
179+ * @return {ListNode}
180+ */
181+ var reverseKGroup = function (head , k ) {
182+ // 标兵
183+ let dummy = new ListNode ()
184+ dummy .next = head
185+ let [start, end] = [dummy, dummy .next ]
186+ let count = 0
187+ while (end) {
188+ count++
189+ if (count % k === 0 ) {
190+ start = reverseList (start, end .next )
191+ end = start .next
192+ } else {
193+ end = end .next
194+ }
195+ }
196+ return dummy .next
197+
198+ // 翻转stat -> end的链表
199+ function reverseList (start , end ) {
200+ let [pre, cur] = [start, start .next ]
201+ const first = cur
202+ while (cur !== end) {
203+ let next = cur .next
204+ cur .next = pre
205+ pre = cur
206+ cur = next
207+ }
208+ start .next = pre
209+ first .next = cur
210+ return first
211+ }
212+ };
213+
172214```
173215
174216## 参考(References)
@@ -178,13 +220,13 @@ class Solution:
178220
179221- 要求从后往前以` k ` 个为一组进行翻转。** (字节跳动(ByteDance)面试题)**
180222
181- 例子,` 1->2->3->4->5->6->7->8, k = 3 ` ,
182-
223+ 例子,` 1->2->3->4->5->6->7->8, k = 3 ` ,
224+
183225 从后往前以` k=3 ` 为一组,
184- - ` 6->7->8 ` 为一组翻转为` 8->7->6 ` ,
185- - ` 3->4->5 ` 为一组翻转为` 5->4->3 ` .
226+ - ` 6->7->8 ` 为一组翻转为` 8->7->6 ` ,
227+ - ` 3->4->5 ` 为一组翻转为` 5->4->3 ` .
186228 - ` 1->2 ` 只有2个nodes少于` k=3 ` 个,不翻转。
187-
229+
188230 最后返回: ` 1->2->5->4->3->8->7->6 `
189231
190232这里的思路跟从前往后以` k ` 个为一组进行翻转类似,可以进行预处理:
0 commit comments