Go言語の練習 - container/list 2回目
今日もなんとなくcontainer/listをいじってて、ついでに単方向連結リストを書いてみた。
package main import ( "container/list" "fmt" ) type SinglyLinkedListNode struct { next *SinglyLinkedListNode Value interface{} } func (node *SinglyLinkedListNode) Next() *SinglyLinkedListNode { return node.next } type SinglyLinkedList struct { head *SinglyLinkedListNode length int } func (node *SinglyLinkedList) Front() *SinglyLinkedListNode { return node.head } func (list *SinglyLinkedList) Add(value interface{}) { list.head = &SinglyLinkedListNode{list.head, value} list.length++ } func main() { // 単方向連結リスト slist := SinglyLinkedList{} slist.Add("さしすせそ") slist.Add("かきくけこ") slist.Add("あいうえお") // 順番に取得 for e := slist.Front(); e != nil; e = e.Next() { fmt.Printf("%v\n", e.Value) } // 双方向連結リスト dlist := list.New() dlist.PushBack("あいうえお") dlist.PushBack("かきくけこ") dlist.PushBack("さしすせそ") // 順番に取得 for e := dlist.Front(); e != nil; e = e.Next() { fmt.Printf("%v\n", e.Value) } // 逆順に取得 for e := dlist.Back(); e != nil; e = e.Prev() { fmt.Printf("%v\n", e.Value) } }