Это не мой код. Я снял этот код с этого веб-сайта:
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 → почему для головы задано значение NULL? Я знаю, что вы должны (я делаю это по привычке), но я действительно не знаю, почему.
-
curr- > next = head → Я так и не понял. Может быть, у меня есть определение "head" неправильно, но в регулярном связанном списке, является ли это стартовым node или последним node в списке? Я всегда считал, что это начальный node, но в этой строке он выглядит как последний node.
-
head = curr → Почему мы устанавливаем его равным curr?
-
curr = head →, а затем установите curr = head после завершения цикла.
-
while (curr) → Просто, чтобы убедиться, что это проходит через список, и он эквивалентен while (curr!= NULL) правильно?