Skip to content

Commit

Permalink
update leetcode
Browse files Browse the repository at this point in the history
  • Loading branch information
xiaobinqt committed Jul 18, 2023
1 parent e0e5e5d commit 92239e3
Showing 1 changed file with 121 additions and 0 deletions.
121 changes: 121 additions & 0 deletions book.leetcode/docs/hard/25.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
---
weight: 25

bookFlatSection: true

BookToC: true

title: "25. K 个一组翻转链表"
---

# 25. K 个一组翻转链表

## 题目地址

+ [力扣](https://leetcode.cn/problems/reverse-nodes-in-k-group/)
+ [LeetCode](https://leetcode.com/problems/reverse-nodes-in-k-group/)

## 解题思路

## 具体实现

{{< tabs "uniqueid" >}}

{{< tab "Go" >}}

```go
package main

import "fmt"

type ListNode struct {
Val int
Next *ListNode
}

func reverseKGroup(head *ListNode, k int) *ListNode {
// 反转链表
reverse := func(head *ListNode) *ListNode {
if head == nil {
return nil
}

var (
prev, curr, next *ListNode
)
curr = head
for curr != nil {
next = curr.Next
curr.Next = prev

prev = curr
curr = next
}

return prev
}

dummy := &ListNode{}
var (
prev, end *ListNode
)

dummy.Next = head
prev = dummy
end = dummy

for end.Next != nil {
// 把 end 往后移动 k 个位置
for i := 0; i < k && end != nil; i++ {
end = end.Next
}
if end == nil {
break
}

start := prev.Next
next := end.Next
end.Next = nil

prev.Next = reverse(start)
start.Next = next

prev = start
end = start

}

return dummy.Next
}

func main() {
ret := reverseKGroup(&ListNode{
Val: 1,
Next: &ListNode{
Val: 2,
Next: &ListNode{
Val: 3,
Next: &ListNode{
Val: 4,
Next: &ListNode{
Val: 5,
Next: nil,
},
},
},
},
}, 2)

fmt.Println(ret)
}

```
{{< /tab >}}

{{< /tabs >}}

## 参考

+ [链表中的节点每k个一组翻转](https://www.bilibili.com/video/BV1kg4y137UU)
+ [图解 K 个一组翻转链表](https://leetcode.cn/problems/reverse-nodes-in-k-group/solutions/10416/tu-jie-kge-yi-zu-fan-zhuan-lian-biao-by-user7208t/)

0 comments on commit 92239e3

Please sign in to comment.