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?

0
Atreidex 3 août 2017 à 20:11

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;
        }
}
1
Mekicha 4 août 2017 à 08:24

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");
}
1
Shubham Indrawat 5 août 2017 à 05:24