update at 2022-05-22 23:54:36 by ehlxr

master
ehlxr 2022-05-22 23:54:36 +08:00
commit eb0bbbf53c
4 changed files with 83 additions and 0 deletions

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module github.com/ehlxr/leetcode-go
go 1.18

22
main.go Normal file
View File

@ -0,0 +1,22 @@
package main
import (
"fmt"
. "github.com/ehlxr/leetcode-go/src"
)
func main() {
node5 := &Node{Value: 5, Next: nil}
node4 := &Node{Value: 4, Next: node5}
node3 := &Node{Value: 3, Next: node4}
node2 := &Node{Value: 2, Next: node3}
node1 := &Node{Value: 1, Next: node2}
root := &Node{Value: 0, Next: node1}
// fmt.Printf("%v\n", root)
// fmt.Printf("%v\n", Reverse(root))
fmt.Printf("%v\n", ReverseKGroup(root, 2))
}

15
src/node.go Normal file
View File

@ -0,0 +1,15 @@
package src
import "fmt"
type Node struct {
Value int
Next *Node
}
func (n *Node) String() string {
if n == nil {
return "nil"
}
return fmt.Sprintf("{Value:%d Next:%+v}", n.Value, *n.Next)
}

43
src/reverse.go Normal file
View File

@ -0,0 +1,43 @@
package src
func Reverse(root *Node) *Node {
var pre, tmp *Node
cur := root
for cur != nil {
tmp = cur.Next
cur.Next = pre
pre = cur
cur = tmp
}
return pre
}
func ReverseKGroup(root *Node, k int) *Node {
if root == nil {
return root
}
n := root
for i := 0; i < k; i++ {
if n == nil {
break
}
n = n.Next
}
tmp := ReverseN(root, n)
root.Next = ReverseKGroup(n, k)
return tmp
}
func ReverseN(root *Node, n *Node) *Node {
var pre, tmp *Node
cur := root
for cur != n {
tmp = cur.Next
cur.Next = pre
pre = cur
cur = tmp
}
return pre
}