Je suis trop nouveau sur les structures de données, en fait j'ai commencé hier. Voici le code:
#include <stdio.h>
#include <stdlib.h>
struct node
{
int x;
node *next;
};
void addToList(node *r, int a);
void printList(node *r);
int main()
{
node *root;
root = NULL;
for (int i = 0; i < 5; i++)
{
int a;
scanf("%d", &a);
addToList(root, a);
}
printList(root);
return 0;
}
void addToList(node *r, int a)
{
while (r != NULL)
r = r -> next;
r = (node *)malloc(sizeof(node));
r -> x = a;
r -> next = NULL;
}
void printList(node *r)
{
while (r != NULL)
{
printf("%d ", r -> x);
r = r -> next;
}
printf("\n");
}
Je m'attends à ce que le programme intègre 5 nouveaux éléments dans la liste et les imprime ensuite. Mais à la fin du programme, rien ne se passe. Quelle est ma faute?
2 réponses
Vous avez root = NULL
mais votre fonction addtoList
vérifie si root !=NULL
. Donc le test échoue là-bas et rien n'est ajouté. Vous devriez avoir quelque chose comme ça à la place:
void addToList(node *r, int a) {
struct node *temp;
temp=(struct node *)malloc(sizeof(struct node));
temp->data = a;
if (r== NULL) {
r = temp;
r->next = NULL;
}
else {
temp->next = r;
r = temp;
}
}
Ici, la première erreur est que vous n'avez pas pris la variable de pointeur *root
comme globale, donc elle ne mettra pas à jour la valeur de *root
chaque fois qu'un nouveau nœud est inséré. Il conservera la valeur de *root
comme NULL
.
Le code ci-dessous contient des commentaires, qui expliqueront très facilement les différentes erreurs que vous avez faites.
#include <stdio.h>
#include <stdlib.h>
struct node
{
int x;
node *next;
};
node *root; //Declaring the *root as global
void addToList(int a);
void printList();
//removing the *root as parameter from both the functions
int main()
{
root = NULL;
for (int i = 0; i < 5; i++)
{
int a;
scanf("%d", &a);
addToList(a);
}
printList();
return 0;
}
void addToList(int a)
{
//Declaring a temporary pointer(*temp) to avoid the value loss of the *root pointer
node *temp=root;
//Declaring a new node to save the data taken from the user
node *nn = (node *)malloc(sizeof(node));
//Assigning the values to the new node(*nn)
nn->x=a;
nn->next=NULL;
//Checking that the root node is NULL or not
//If root is empty, then new node is assigned to *root
if(root == NULL)
{
root=nn;
}
//Else, we will first find the last node of the linklist using the *temp pointer
else
{
while (temp->next != NULL)
temp = temp -> next;
//Assigning the new node after the last node of the linklist
temp->next=nn;
}
}
void printList()
{
node *r=root;
while (r != NULL)
{
printf("%d ", r -> x);
r = r -> next;
}
printf("\n");
}
De nouvelles questions
c
C est un langage de programmation à usage général utilisé pour la programmation système (OS et embarqué), les bibliothèques, les jeux et les plateformes multiples. Cette balise doit être utilisée avec des questions générales concernant le langage C, tel que défini dans la norme ISO 9899 (la dernière version, 9899: 2018, sauf indication contraire - également balise les demandes spécifiques à la version avec c89, c99, c11, etc.). C est distinct de C ++ et il ne doit pas être combiné avec la balise C ++ en l'absence d'une raison rationnelle.