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.
Add new comment