Explication du code (liste chaînée C)

Ce n'est pas mon code. J'ai pris ce code sur ce site:

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

Je suis à l'aide de documents de référence sur la façon de construire une liste liée. Je suis un peu confus sur ce qui se passe. Quelqu'un peut-il m'expliquer ce qui se passe. Je vais marquer ce qui est de me confondre avec 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 ;
   }
  1. tête = NULL → pourquoi la tête d'être mis à NULL? Je sais que vous êtes censé (je le fais d'habitude), mais je ne sais pas vraiment pourquoi.
  2. curr->next = tête → je n'ai jamais vraiment compris. J'ai peut-être ma définition de la "tête" de mal, mais dans une liste liée, est-ce que le nœud de départ ou le dernier nœud sur la liste? J'ai toujours supposé que c'était le nœud de départ, mais dans cette ligne, on dirait que c'est le dernier nœud.
  3. tête = curr → Pourquoi sommes-nous définir égal à curr?
  4. curr = la tête → puis en définissant curr = la tête après la boucle est terminée.
  5. while(curr) → Juste pour s'assurer, c'est de la traversée par le biais de la liste et il est équivalent à tout(curr != NULL) droit?

source d'informationauteur juice