リスト構造自体はそんなに難しいものではなくて、単に数珠つなぎになってるだけ。
例えば
http://www9.plala.or.jp/sgwr-t/c/sec15-5.html
演習のほうも見てみませう。
提示コードは先頭に追加される必要がある場合にうまくない。
それとも最初に作ってる sta は番兵?
番兵にせよなんにせよ今のままでは sta が auto なのでまずいけど。
>fo->next->numは、その時点でのfoのnext側のnumを見てる
もちろん
>どこでfree()というやつで解放してやれば良いのでしょうか。
要らなくなったとき。
malloc() するってことは、当座しばらくは必要だから保持しとけ、ということ。
例えばワード等で文章を開いたときなんかにこうやって文書データを保持してるわけだ。
free() するのは文章を閉じたときとかワードを終了するときとか。
提示コードであればリストを破棄するのは main 終了直前でしょうな。
こういうのはポインタに関する「文法理解」ではなくてむしろ「アルゴリズム理解」の話。
線形リストの場合「真ん中に挿入」する場合がいちばん簡単で、紹介先の図のとおり。
一番最初の1個目を作る場合と、末尾に追加する場合とが特殊なわけだ。
でも、実際には特殊ではなくて、ロジック上真ん中に挿入の場合と同じに扱える
ということが理解できるかどうかが肝。