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

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

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), верно?

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

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