Below, certainly the most easy example of the linked lists.
Let’s see this example as a FILO, meaning First In Last Out:
#include <stdlib.h>
#include <stdio.h>
/*
** STRUCTURE
*/
typedef struct s_list
{
int nb;
struct s_list *next;
} t_list;
/*
** ADD
*/
t_list *add(t_list *element, int i)
{
t_list *link;
link = malloc(sizeof(*link));
link->nb = i;
link->next = element;
return (link);
}
/*
** DISPLAY
*/
void display(t_list *toDisplay)
{
while (toDisplay != NULL)
{
printf("toDisplay->nb = %d\n", toDisplay->nb);
toDisplay = toDisplay->next;
}
}
/*
** MAIN
*/
int main()
{
t_list *new;
int i;
new = NULL;
i = 0;
while (i < 18)
new = add(new, i++);
display(new);
return (0);
}
Result:
toDisplay->nb = 17
toDisplay->nb = 16
toDisplay->nb = 15
toDisplay->nb = 14
toDisplay->nb = 13
toDisplay->nb = 12
toDisplay->nb = 11
toDisplay->nb = 10
toDisplay->nb = 9
toDisplay->nb = 8
toDisplay->nb = 7
toDisplay->nb = 6
toDisplay->nb = 5
toDisplay->nb = 4
toDisplay->nb = 3
toDisplay->nb = 2
toDisplay->nb = 1
toDisplay->nb = 0
Indeed, the first structure to be displayed is the last added. And the last displayed is the first added.
Let’s see now the same example but without any return value:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct s_ll
{
int nb;
struct s_ll *next;
} t_ll;
void add(t_ll **linkedList, int i)
{
t_ll *new;
new = malloc(sizeof(*new));
new->nb = i;
new->next = *linkedList;
*linkedList = new;
}
void display(t_ll *linkedList)
{
while (linkedList != NULL)
{
printf("linkedList->nb = %d\n", linkedList->nb);
linkedList = linkedList->next;
}
}
void init()
{
t_ll *linkedList;
int i;
int av;
av = 18;
i = 0;
linkedList = NULL;
while (i < av)
add(&linkedList, i++);
display(linkedList);
}
int main()
{
init();
return (0);
}
This time we let a link from the first structure. We use for that the double pointer in our add() function.