mk-toolブログ

エンジニアと家のことをごちゃごちゃと書いてます

【Go】逆順リストを書く

概要

いまさらですが逆順リストを書く。 元ネタは改訂第4版 C言語によるはじめてのアルゴリズム入門

本題

以下ソースコード

package main

import (
    "fmt"
)

type node struct {
    name string
    tel string
  pointer *node
}

func main() {
    var head *node = nil

    for{        
        n := new(node)
        fmt.Println("name tel")
        fmt.Scanf("%s %s", &n.name, &n.tel)
        n.pointer = head
        head = n

        if(!next()){
            show(n)
            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
aaa 000
continue? [y/n]
b
continue? [y/n]
y
name tel
bbb 111
continue? [y/n]
n
/////逆順リスト/////
bbb 111
aaa 000