【golang練習】用go實現單向鏈表逆序

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章