Это не мой код. Я удалил этот код с этого сайта:
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), верно?