From eb0bbbf53c3b49acf1ce5c0648a12e5bfdcbaf01 Mon Sep 17 00:00:00 2001 From: ehlxr Date: Sun, 22 May 2022 23:54:36 +0800 Subject: [PATCH] update at 2022-05-22 23:54:36 by ehlxr --- go.mod | 3 +++ main.go | 22 ++++++++++++++++++++++ src/node.go | 15 +++++++++++++++ src/reverse.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 83 insertions(+) create mode 100644 go.mod create mode 100644 main.go create mode 100644 src/node.go create mode 100644 src/reverse.go diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..b621d96 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module github.com/ehlxr/leetcode-go + +go 1.18 diff --git a/main.go b/main.go new file mode 100644 index 0000000..6ff3b03 --- /dev/null +++ b/main.go @@ -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)) +} diff --git a/src/node.go b/src/node.go new file mode 100644 index 0000000..2bc53bb --- /dev/null +++ b/src/node.go @@ -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) +} diff --git a/src/reverse.go b/src/reverse.go new file mode 100644 index 0000000..7641b5e --- /dev/null +++ b/src/reverse.go @@ -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 +}