これは私のコードではありません。私はこのウェブサイトからこのコードを取りました:
http://www.macs.hw.ac.uk/~rjp/Coursewww/Cwww/linklist.html
リンクされたリストの作成方法に関する参考資料として使用しています。何が起こっているのか少し混乱しています。誰かが私に何が起こっているのか説明してもらえますか. 混乱しているものに 1 ~ 5 のマークを付けます。
#include<stdlib.h>
#include<stdio.h>
struct list_el {
int val;
struct list_el * next;
};
typedef struct list_el item;
void main() {
item * curr, * head;
int i;
head = NULL; //1
for(i=1;i<=10;i++) {
curr = (item *)malloc(sizeof(item));
curr->val = i;
curr->next = head; //2
head = curr; //3
}
curr = head; // 4
while(curr) { //5
printf("%d\n", curr->val);
curr = curr->next ;
}
head = NULL → head が NULL に設定されているのはなぜですか? 私はあなたがそうしなければならないことを知っています (私は習慣からそうしています) が、その理由はよくわかりません.
curr->next = head → これもよくわからなかった。「頭」の定義が間違っているかもしれませんが、通常のリンクされたリストでは、それはリストの開始ノードですか、それとも最後のノードですか? 私は常にそれが開始ノードであると想定していましたが、この行では最後のノードのように見えます。
head = curr → なぜ curr に等しく設定するのですか?
curr = head → そして、ループが終わった後に curr = head を設定します。
while(curr) → 念のため言っておきますが、これはリストをトラバースしていて、while(curr != NULL) と同じですよね?