Bonjour ! En lisant un tuto sur les listes doublement chainées, j'en suis arrivé à ce code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| Dlist *dlist_insert(Dlist *p_list, int data, int position)
{
if (p_list != NULL)
{
struct node *p_temp = p_list->p_head;
int i = 1;
while (p_temp != NULL && i <= position)
{
if (position == i)
{
if (p_temp->p_next == NULL)
{
p_list = dlist_append(p_list, data);
}
else if (p_temp->p_prev == NULL)
{
p_list = dlist_prepend(p_list, data);
}
else
{
struct node *p_new = malloc(sizeof *p_new);;
if (p_new != NULL)
{
p_new->data = data;
p_temp->p_next->p_prev = p_new;
p_temp->p_prev->p_next = p_new;
p_new->p_prev = p_temp->p_prev;
p_new->p_next = p_temp;
p_list->length++;
}
}
}
else
{
p_temp = p_temp->p_next;
}
i++;
}
}
return p_list;
} |
Aussi je ne comprends pas pourquoi dans l'avant-dernier else, on a :
et non pas :
p_new->p_next = p_temp->p_next;
Merci d'avance pour votre aide !
Partager