質問: -1 アドレスは00681358 2 7 4 3 9 5 C:\MinGW\users\chap09\kadai> ```
回答: このプログラムは少し変わった振る舞いをします。 次のようなリストを想像してください。 ループn-1: ○ <-- ○ ループn : ○ <-- ○ <-- ○ ループn+1: ○ <-- ○ <-- ○ <-- ○ という風に右に伸びていくけど、左にリンクが貼られるようなリストです。どんどん右に追加されていきます。 ここで新しいデータを付け足すとしましょう。今、4つの○があるとします。`head`は常に一番右端の○を指します。そこに新しいデータがやってくると、まず、`p = malloc(sizeof(NODE));`で新しく△を作ります。 この△から一番右端の○すなわち`head`にリンクを貼るのが`p->next = head;`です。 今こういう状態です。 ○ <-- ○ <-- ○ <-- ○ <-- △ これで新しいノードが追加されたわけですが、`head`は常に一番右端を指しておく必要があるので、headを△つまり`p`の位置に動かします。それが、`head = p;`です。最後に、`p`にデータを保存するのを忘れずに`p->data = x`ですね。