Объяснение кода (связанный список C)

Это не мой код Я взял этот код с этого сайта:

http://www.macs.hw.ac.uk/~rjp/Coursewww/Cwww/linklist.html

Я использую для справочного материала о том, как построить связанный список. Я'Я немного запутался в том, что происходит. Может кто-нибудь, пожалуйста, объясните мне, что происходит. Я'Отмечу, что меня смущает 1-5.

#include
#include

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;ival = i;
      curr->next  = head; //2
      head = curr; //3
   }

   curr = head; // 4

   while(curr) {  //5
      printf("%d\n", curr->val);
      curr = curr->next ;
   }

голова = NULL → почему заголовок имеет значение NULL? Я знаю, что вы должны (я делаю это по привычке), но я неЯ действительно знаю почему.

curr->следующий = голова → Я так и не понял этого. Может быть, у меня есть свое определениеголова" неправильно, но в обычном связанном списке, это начальный узел или последний узел в списке? Я'Мы всегда предполагали, что это был начальный узел, но в этой строке это выглядит так:последний узел

голова = курс → Почему мы устанавливаем это равным curr?

curr = head → и затем установка curr = head после завершения цикла.

while (curr) → Просто чтобы убедиться, что это прохождение по списку и оно эквивалентно while (curr! = NULL), верно?

Ответы на вопрос(7)

Ваш ответ на вопрос