【Go】順リストを書く
概要
いまさらですが順リストを書く。 元ネタは改訂第4版 C言語によるはじめてのアルゴリズム入門。
本題
以下ソースコード。
old.pointer = n
の次にold = n
とあるのですが、これってoldの指すアドレスを変えるってことなんだな、と理解するまでに苦労した。オブジェクトとして考えてはいけない。
package main import ( "fmt" ) type node struct { name string tel string pointer *node } func main() { var head *node = new(node) var old *node = head for{ n := new(node) fmt.Println("name tel") fmt.Scanf("%s %s", &n.name, &n.tel) old.pointer = n old = n if(!next()){ show(head.pointer) break } } } func show(n *node) { fmt.Println("/////順リスト/////") for{ if(n == nil){ break } fmt.Printf("%s %s", n.name, n.tel) fmt.Println("") n = n.pointer } } func next() bool { continue_str := "" for{ fmt.Println("continue? [y/n]") fmt.Scanf("%s", &continue_str) if(continue_str == "y"){ return true } if(continue_str == "n"){ return false } } }
結果
name tel
と聞かれるので適当な文字列を半角スペース区切りで2つ入力する。
continueの旨を聞かれるのでy/nで回答。
yをすると、もう一度name tel
と聞かれる繰り返し。
nをすると作られたリストが表示される。
name tel a 1 continue? [y/n] y name tel b 2 continue? [y/n] y name tel c 3 continue? [y/n] n /////順リスト///// a 1 b 2 c 3