Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e304b36

Browse files
committed
feat: update go solutions to lc problem: No.0025
No.0025.Reverse Nodes in k-Group
1 parent 9969c49 commit e304b36

File tree

3 files changed

+142
-88
lines changed

3 files changed

+142
-88
lines changed

‎solution/0000-0099/0025.Reverse Nodes in k-Group/README.md‎

Lines changed: 60 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,14 @@
5050

5151
<!-- 这里可写通用的实现逻辑 -->
5252

53+
**方法一:迭代**
54+
55+
时间复杂度为 $O(n),ドル空间复杂度为 $O(1),ドル其中 $n$ 是链表的长度。
56+
57+
**方法二:递归**
58+
59+
时间复杂度为 $O(n),ドル空间复杂度为 $O(\log _k n),ドル其中 $n$ 是链表的长度。
60+
5361
<!-- tabs:start -->
5462

5563
### **Python3**
@@ -244,6 +252,8 @@ function reverseKGroup(head: ListNode | null, k: number): ListNode | null {
244252

245253
### **Go**
246254

255+
迭代:
256+
247257
```go
248258
/**
249259
* Definition for singly-linked list.
@@ -253,40 +263,64 @@ function reverseKGroup(head: ListNode | null, k: number): ListNode | null {
253263
* }
254264
*/
255265
func reverseKGroup(head *ListNode, k int) *ListNode {
256-
dummy := &ListNode{0, head}
257-
pre := dummy
258-
cur := dummy
259-
for cur.Next != nil {
260-
for i := 0; i < k && cur != nil; i++ {
266+
var dummy *ListNode = &ListNode{}
267+
p, cur := dummy, head
268+
for cur != nil {
269+
start := cur
270+
for i := 0; i < k; i++ {
271+
if cur == nil {
272+
p.Next = start
273+
return dummy.Next
274+
}
261275
cur = cur.Next
262276
}
263-
if cur == nil {
264-
return dummy.Next
265-
}
266-
t := cur.Next
267-
cur.Next = nil
268-
start := pre.Next
269-
pre.Next = reverseList(start)
270-
start.Next = t
271-
pre = start
272-
cur = pre
277+
p.Next, p = reverse(start, cur), start
273278
}
274279
return dummy.Next
275280
}
276281

277-
func reverseList(head *ListNode) *ListNode {
278-
if head == nil || head.Next == nil {
279-
return head
282+
func reverse(start, end *ListNode) *ListNode {
283+
var pre *ListNode = nil
284+
for start != end {
285+
tmp := start.Next
286+
start.Next, pre = pre, start
287+
start = tmp
280288
}
281-
dummyHead := &ListNode{}
282-
cur := head
283-
for cur != nil {
284-
tmp := cur.Next
285-
cur.Next = dummyHead.Next
286-
dummyHead.Next = cur
287-
cur = tmp
289+
return pre
290+
}
291+
```
292+
293+
递归:
294+
295+
```go
296+
/**
297+
* Definition for singly-linked list.
298+
* type ListNode struct {
299+
* Val int
300+
* Next *ListNode
301+
* }
302+
*/
303+
func reverseKGroup(head *ListNode, k int) *ListNode {
304+
start, end := head, head
305+
for i := 0; i < k; i++ {
306+
if end == nil {
307+
return head
308+
}
309+
end = end.Next
310+
}
311+
res := reverse(start, end)
312+
start.Next = reverseKGroup(end, k)
313+
return res
314+
}
315+
316+
func reverse(start, end *ListNode) *ListNode {
317+
var pre *ListNode = nil
318+
for start != end {
319+
tmp := start.Next
320+
start.Next, pre = pre, start
321+
start = tmp
288322
}
289-
return dummyHead.Next
323+
return pre
290324
}
291325
```
292326

‎solution/0000-0099/0025.Reverse Nodes in k-Group/README_EN.md‎

Lines changed: 66 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,14 @@
3939

4040
## Solutions
4141

42+
**Approach 1: Iteration**
43+
44+
Time complexity $O(n),ドル Space complexity $O(1)$.
45+
46+
**Approach 2: Recursion**
47+
48+
Time complexity $O(n),ドル Space complexity $O(\log _k n)$.
49+
4250
<!-- tabs:start -->
4351

4452
### **Python3**
@@ -229,6 +237,8 @@ function reverseKGroup(head: ListNode | null, k: number): ListNode | null {
229237

230238
### **Go**
231239

240+
Iteration:
241+
232242
```go
233243
/**
234244
* Definition for singly-linked list.
@@ -238,40 +248,64 @@ function reverseKGroup(head: ListNode | null, k: number): ListNode | null {
238248
* }
239249
*/
240250
func reverseKGroup(head *ListNode, k int) *ListNode {
241-
dummy := &ListNode{0, head}
242-
pre := dummy
243-
cur := dummy
244-
for cur.Next != nil {
245-
for i := 0; i < k && cur != nil; i++ {
246-
cur = cur.Next
247-
}
248-
if cur == nil {
249-
return dummy.Next
250-
}
251-
t := cur.Next
252-
cur.Next = nil
253-
start := pre.Next
254-
pre.Next = reverseList(start)
255-
start.Next = t
256-
pre = start
257-
cur = pre
258-
}
259-
return dummy.Next
251+
var dummy *ListNode = &ListNode{}
252+
p, cur := dummy, head
253+
for cur != nil {
254+
start := cur
255+
for i := 0; i < k; i++ {
256+
if cur == nil {
257+
p.Next = start
258+
return dummy.Next
259+
}
260+
cur = cur.Next
261+
}
262+
p.Next, p = reverse(start, cur), start
263+
}
264+
return dummy.Next
260265
}
261266

262-
func reverseList(head *ListNode) *ListNode {
263-
if head == nil ||head.Next == nil {
264-
return head
265-
}
266-
dummyHead := &ListNode{}
267-
cur := head
268-
for cur != nil {
269-
tmp := cur.Next
270-
cur.Next = dummyHead.Next
271-
dummyHead.Next = cur
272-
cur = tmp
273-
}
274-
return dummyHead.Next
267+
func reverse(start, end *ListNode) *ListNode {
268+
var pre *ListNode = nil
269+
for start != end {
270+
tmp := start.Next
271+
start.Next, pre = pre, start
272+
start = tmp
273+
}
274+
return pre
275+
}
276+
```
277+
278+
Recursion:
279+
280+
```go
281+
/**
282+
* Definition for singly-linked list.
283+
* type ListNode struct {
284+
* Val int
285+
* Next *ListNode
286+
* }
287+
*/
288+
func reverseKGroup(head *ListNode, k int) *ListNode {
289+
start, end := head, head
290+
for i := 0; i < k; i++ {
291+
if end == nil {
292+
return head
293+
}
294+
end = end.Next
295+
}
296+
res := reverse(start, end)
297+
start.Next = reverseKGroup(end, k)
298+
return res
299+
}
300+
301+
func reverse(start, end *ListNode) *ListNode {
302+
var pre *ListNode = nil
303+
for start != end {
304+
tmp := start.Next
305+
start.Next, pre = pre, start
306+
start = tmp
307+
}
308+
return pre
275309
}
276310
```
277311

‎solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.go‎

Lines changed: 16 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -6,38 +6,24 @@
66
* }
77
*/
88
func reverseKGroup(head *ListNode, k int) *ListNode {
9-
dummy := &ListNode{0, head}
10-
pre := dummy
11-
cur := dummy
12-
for cur.Next != nil {
13-
for i := 0; i < k && cur != nil; i++ {
14-
cur = cur.Next
9+
start, end := head, head
10+
for i := 0; i < k; i++ {
11+
if end == nil {
12+
return head
1513
}
16-
if cur == nil {
17-
return dummy.Next
18-
}
19-
t := cur.Next
20-
cur.Next = nil
21-
start := pre.Next
22-
pre.Next = reverseList(start)
23-
start.Next = t
24-
pre = start
25-
cur = pre
14+
end = end.Next
2615
}
27-
return dummy.Next
16+
res := reverse(start, end)
17+
start.Next = reverseKGroup(end, k)
18+
return res
2819
}
2920

30-
func reverseList(head *ListNode) *ListNode {
31-
if head == nil || head.Next == nil {
32-
return head
33-
}
34-
dummyHead := &ListNode{}
35-
cur := head
36-
for cur != nil {
37-
tmp := cur.Next
38-
cur.Next = dummyHead.Next
39-
dummyHead.Next = cur
40-
cur = tmp
21+
func reverse(start, end *ListNode) *ListNode {
22+
var pre *ListNode = nil
23+
for start != end {
24+
tmp := start.Next
25+
start.Next, pre = pre, start
26+
start = tmp
4127
}
42-
return dummyHead.Next
43-
}
28+
return pre
29+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /