On me dit que cela échouera à ajouter correctement le nœud à la liste, mais je l'ai testé et il semble fonctionner. Quelqu'un peut-il me faire savoir ce qui est incorrect dans ce code?Code pour ajouter un élément au début d'une liste dans c - quelle est l'erreur?
struct node {
int num;
struct node* next;
};
void add_first(struct node* head, struct node* new_node) {
new_node->next = head;
head = new_node;
}
La question exacte que je suis en train de répondre est:
a) Cette fonction ne pas donner le résultat escompté (à savoir, ajouter le nœud). Quel est le problème et quand cela se produit-il? Pour tenter de trouver le problème, j'ai créé quatre noeuds, utilisé la fonction add_first et affiché les résultats. J'ai l'impression d'obtenir une sortie correcte, cependant. Voici le programme que j'ai écrit, non compris dans l'ensemble les fonctions ci-dessus:
void display(struct node* head) {
printf("%d ", head->num);
if(head->next == NULL) {
return;
}
display(head->next);
}
int main() {
struct node* n1;
struct node* n2;
struct node* n3;
n1 = (struct node*)malloc(sizeof(struct node*));
n2 = (struct node*)malloc(sizeof(struct node*));
n3 = (struct node*)malloc(sizeof(struct node*));
n1->num = 1;
n2->num = 2;
n3->num = 3;
add_first(n1, n2);
add_first(n2, n3);
display(n3);
return 0;
}
La sortie Je reçois est:
Ce qui semble être correct. Donc, si j'obtiens la sortie correcte, pourquoi la fonction échoue-t-elle à donner le résultat attendu? Je n'y vois pas de problème.
Le problème le plus important est que vous ne pouvez pas mettre à jour le nœud de l'appelant. Essayez de changer l'API pour aimer 'n1 = add_first (n1, n2);' (return head) Et l'autre problème est 'sizeof (struct node *)' -> 'sizeof (struct node)' et 'next' n'est pas initialisé. E.g 'n1-> num = 1;' -> 'n1-> num = 1; n1-> suivant = NULL; ' – BLUEPIXY