package main
import "fmt"
type HeadList struct {
Head *Node
Tail *Node
}
type Node struct {
Next *Node
Data int
}
func NewHead() *HeadList {
return &HeadList{Head: nil, Tail: nil}
}
func (hl *HeadList) Print() {
for n := hl.Head; n != nil; n = n.Next {
fmt.Printf("%d ", n.Data)
}
}
func (n *HeadList) Add(data int) {
node := &Node{
Next: nil,
Data: data,
}
if n.Head == nil && n.Tail == nil {
n.Head = node
n.Tail = node
return
}
n.Tail.Next = node
n.Tail = node
}
func (n *Node) Revers(hl *HeadList) {
if n.Next != nil {
n.Next.Revers(hl)
}
hl.Add(n.Data)
}
func main() {
headList := NewHead()
headList.Add(1)
headList.Add(2)
headList.Add(3)
headList.Add(4)
headList.Print()
fmt.Println("\n-----------")
reversheadList := NewHead()
headList.Head.Revers(reversheadList)
reversheadList.Print()
}
結果:
1 2 3 4
-----------
4 3 2 1
Process finished with exit code 0