単連結リストの整列 #5 デグレードしてた

変更箇所はほとんどないのに前回の変更でバグを作りこんでいた。
実験的コードだからといってシステマティックなテストはやらないと駄目ということか。

関数node_printにNULLをfirst_nodeとして渡すとこける。
前回の変更前はpをfirst_nodeで初期化した直後、
ループが開始される前にpとNULLとを比較するようになっていた。
変更後、無条件にfirst_node->nextで初期化するバグが入った。

...snip
static void node_print(node_t *first_node)
{
    node_t *p;
    if (first_node == NULL) return;
    for (p = first_node->next; p != NULL; p = p->next) {
        printf(p->next == NULL ? "%d\n" : "%d ", p->val);
    }
}
...snip

修正は単にfirst_nodeが有効なアドレスかどうかをチェックする文を入れるだけである。