Think est une fonction permettant d'insérer un nouvel élément dans l'ordre de son nom. Je savais comment le faire si j'utilise une condition d'insertion si au départ et autres. Mais on m'a demandé de fusionner le si et le while en une seule boucle while. Comment est-ce que j'ai pu intégrer la fonction d'insertion dans une boucle while avec le pointeur au pointeur?comment utiliser un pointeur vers un pointeur à insérer dans une liste chaînée
person* insert_sorted(person *people, char *name, int age)
{
person *p=NULL;//,*t=NULL,*q=NULL;
person *ptr= people;
person **ptr2ptr=&ptr;
p=malloc(sizeof(person));
if (p == NULL){
printf("malloc() failed\n");
return NULL;
}
else {
p->name = name;
p->age = age;
if (people == NULL){ // empty list
people = p;
people->next =NULL;
}
else{
*ptr2ptr = ptr;
while((*ptr2ptr) !=NULL)
{
if (compare_people(p, people)<=0) // insert at the start
break;
else if ((*ptr2ptr)->next == NULL) //insert at the end
break;
else if (compare_people(*ptr2ptr, p) <=0 && compare_people(p, (*ptr2ptr)->next)<=0)//insert at the middle
break;
*ptr2ptr = (*ptr2ptr)->next;
}
//insert at the end
p->next = (*ptr2ptr)->next;
(*ptr2ptr)->next = p;
}
}
A Au minimum, vous devez faire de l'argument 'people' un pointeur vers un pointeur. Sinon, vous allez simplement modifier les variables locales via ce pointeur vers le pointeur, mais vous devez bien sûr pouvoir mettre à jour le pointeur de la tête depuis la fonction appelante. Les listes liées sont un sujet populaire ici, jetez un oeil aux questions connexes. –
Votre branche toplevel 'else' ne retourne rien. –