最近在追数据结构与算法之美专栏,准备需要code的章节用golang实现一遍,以便学习算法的同时提升golang的姿势水平。
- golang版本链表逆置
package main
import (
"fmt"
)
type Node struct {
data int
next *Node
}
func (r *Node) addNode(i int) {
node := Node{
data: i,
next: nil,
}
node.next = r.next
r.next = &node
}
func (n *Node) reverseNodes() {
p := n.next
if p != nil {
q := p.next
p.next = nil
for; q != nil; {
r := q.next
q.next = p
p = q
q = r
}
n.next = p
}
}
func (r *Node) print() {
for r.next != nil {
r = r.next
fmt.Printf("%d ", r.data)
}
fmt.Println()
}
func (r *Node) findMiddleNode() {
if r.next != nil {
p := r.next
if p != nil {
q := p.next
for {
if q != nil && q.next != nil {
q = q.next.next
p = p.next
} else {
break
}
}
fmt.Println(p.data)
}
}
}
func main() {
rootNode := Node{
data: -1,
next: nil,
}
root := &rootNode
root.addNode(1)
root.addNode(2)
root.addNode(3)
root.addNode(4)
root.addNode(5)
root.addNode(6)
root.reverseNodes()
root.print()
root.findMiddleNode()
}