Question sur les listes doublement chainées.
Bonsoir,
Pour essayer de vraiment bien comprendre les listes doublement chainées je viens de programmer quelques fonctions dont une qui permet d’insérer un élément :
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 42 43 44 45 46
| void list_insert(Liste *p_list)
{
int age=0,position=0;
printf("\n A quelle position ?");
scanf("%d",&position);
printf("\n age ? ");
scanf("%d",&age);
if (p_list != NULL) //Si la liste n'est pas vide
{
struct personne *p_temp = p_list->premiere;
int i=1;
while (p_temp != NULL && i <= position)
{
if (position == i)
{
if (p_temp->suivante == NULL)
{
insertionEnd(p_list);
}
else if (p_temp->precedente == NULL)
{
insertion(p_list);
}
else
{
struct personne *p_new = malloc(sizeof *p_new);
if (p_new != NULL)
{
p_new->age = age;
p_temp->suivante->precedente = p_new; // Ici !!
p_temp->precedente->suivante = p_new;
p_new->precedente = p_temp->precedente;
p_new->suivante = p_temp;
p_list->taille++;
}
}
}
else
{
p_temp = p_temp->suivante;
}
i++;
}
}
} |
ET là, dans cette partie :
Code:
1 2 3 4 5 6
| p_new->age = age;
p_temp->suivante->precedente = p_new; // Ici !!
p_temp->precedente->suivante = p_new;
p_new->precedente = p_temp->precedente;
p_new->suivante = p_temp;
p_list->taille++; |
Je ne comprends pas bien. Si je fais un petit schéma,
L1 -- L2-- L3 --L4
Si je veux introduire un élément entre L2 et L3 on devrait avoir :
L3->precedent->suivant =LNEW (c'est à dire L2->suivant=LNEW )
L3>precedente=LNEW
et LNEW->suivant=L3
LNEW->precedent=L2
J'ai l'impression qu'un truc cloche dans le maillage là... Non ?