En fait, c'était un autre problème mais cela a changé, j'ai donc décidé d'ouvrir une nouvelle question.Affichage après la suppression dans la liste chaînée en C
Mon code est
typedef struct inner_list
{
int count;
char word[100];
inner_list*next;
} inner_list;
typedef struct outer_list
{
char word [100];
inner_list * head;
int count;
outer_list * next;
} outer_list;
void delnode(outer_list **head,char num[100])//thanks to both Nir Levy and Jeremy P.
{
outer_list *temp, *m;
m=temp=*head; /*FIX #1*/
while(temp!=NULL) {
if(strcmp(temp->word,num)==0) {
if(temp==*head) {
delinner(temp->head); /* FIX#2 */
*head=temp->next;
free(temp);
return;
} else {
delinner(temp->head); /* FIX#2 */
m->next=temp->next;
free(temp);
return;
}
} else {
m=temp;
temp= temp->next;
}
}
printf(" ELEMENT %s NOT FOUND ", num);
}
void delinner(inner_list *head) { /* FIX#2 */
inner_list *temp;
temp=head;
while(temp!=NULL) {
head=temp->next;
free(temp);
temp=head;
}
}
void delnode2(outer_list *up,inner_list **head,char num[100])
{
inner_list *temp2,*temp, *m;
outer_list *p;
p = up;
while(p!=NULL){m=temp=temp2=p->head;
while(temp!=NULL) {
if(strcmp(temp->word,num)==0) {
if(temp==(*head)) {
*head=temp->next;
free(temp);
return;
} else {
m->next=temp->next;
free(temp);
return;
}
} else {
m=temp;
temp= temp->next;
}
}
p=p->next;
}
printf(" ELEMENT %s NOT FOUND ", num);
}
void print_node(outer_list *parent_node)
{
while(parent_node!=NULL){
printf("%s\t%d\t", parent_node->word, parent_node->count);
inner_list *child_node = parent_node->head;
printf("list: ");
if(child_node ==NULL){printf("BUARADA");}
while (child_node != NULL) {
printf("%s-%d", child_node->word,child_node->count);
child_node = child_node->next;
if (child_node != NULL) {
printf("->");
}
}
printf("\n");
parent_node = parent_node->next;
}
}
Lors de la suppression d'un élément de la liste extérieure Je tente aussi de supprimer le même élément de inner_list aussi. Par exemple: - Disons que aaa est un élément de la liste chaînée outer_list et pointons-la avec outer_list * p - Cette aaa peut aussi être dans une liste liée à inner_list. (Il peut être dans p-> head ou une autre liste intérieure.) Maintenant, la partie délicate à nouveau. J'ai essayé d'appliquer les mêmes règles avec la suppression de outer_list mais chaque fois que je supprime l'élément head de inner_list cela donne une erreur. Où est la mauvaise chose dans print_node ou delnode2?
Éditer: En fait, si un noeud outer_list est supprimé, la liste chaînée de inner_list à l'intérieur de celui-ci doit également être supprimée. C'est pourquoi la méthode delinner est utilisée.
Par exemple:
outer inner
aaa bb->cc
bb aaa->cc
when i wanted to delete "aaa" The result should be:
outer inner
bb cc
Quelle est exactement l'erreur que vous obtenez? –
bien la suppression est si l'élément à supprimer n'est pas la tête de innerlist. quand je voulais supprimer le premier élément, il donne une erreur lors de l'affichage. Il peut être un problème dans delnode2 peut-être qu'il ne peut pas complètement supprimer le nœud ou la fonction print_node a un problème – LuckySlevin