List chained insertion at the end

0

Hello, I would like to know what to insert into the conditional within the function, to add the elements at the end of the list as long as they are different from 0 ... already tried several ways and I could not ...

    typedef struct node{ // Struct para ser usada como nó...
        int data;
        struct node *next;  
    };

    void insert(node *lista, int a){ // Adicionar elementos no fim da lista
        node *ptr = (node *)malloc(sizeof(node));
        ptr->data = a;

        if(){

        }else{

    }

    int main(){
        //Variáveis
        int n = 1, // Número que vai ser adicionado
        node *lista; // Lista
        while(n!=0){
            printf("Que numero adicionar?\n");
            scanf("%d", &n);
            insert(lista, n);
        }
    
asked by anonymous 19.10.2018 / 16:57

2 answers

0

You can only allocate memory and create a node structure after the user types a non-zero number, otherwise the program will shut down. Then just make sure it is the first time you are creating a node to start the list , if not then append the new node at> at the bottom of the list. This will occur until the user types zero and leaves the while .

#include <stdio.h>
#include <cstring>
#include <cstdlib>

typedef struct node { // Struct para ser usada como nó...
    int data;
    struct node *next;
};

void insert(node *&lista, int numero) { // Adicionar elementos no fim da lista

    node *ptr = NULL;
    node *lista_temp = lista;

    if (numero != 0) {

        ptr = (node*)malloc(sizeof(node));
        ptr->data = numero;
        ptr->next = NULL;

        if (lista == NULL) {

            lista = ptr;
        }
        else {

            while (lista_temp->next != NULL) {

                lista_temp = lista_temp->next;
            }

            lista_temp->next = ptr;
        }
    }
}

int main() {

    //Variáveis
    int numero = 1; // Número que vai ser adicionado
    node *lista = NULL; // Lista
    node *ptr = NULL; // Ponteiro temporário

    while (numero != 0) {
        printf("Que numero adicionar?\nNumero:");
        scanf_s("%d", &numero);
        insert(lista, numero);
    }

    //Usando uma variável temporária para não perder a referência da lista
    ptr = lista;

    while (ptr->next != NULL) {

        printf("%i -> ", ptr->data);
        ptr = ptr->next;
    }

    printf("NULL\n");

    system("pause");
}
    
19.10.2018 / 17:53
0

Keep in mind that you should store the reference to the first node in the list. At each insertion, you should look for the last node and then make the next node the new node. Also, your list started uninitialized and was not initialized by the insert function.

typedef struct node{ // Struct para ser usada como nó...
        int data;
        struct node *next;
}node;
    node *insert(node *lista, int a){ // Adicionar elementos no fim da lista
    if(lista == NULL){
            node *aux = (node*) malloc(sizeof(node));
            aux->data = a;
            aux-> next = NULL;
            return aux;
    }
    node *ptr = (node *)malloc(sizeof(node));
    ptr->data = a;
    ptr->next = NULL;
    if(a != 0){
            node *aux = lista;
            while(aux->next != NULL){
                    aux = aux->next;
            }
            aux->next = ptr;
            return lista;
    }
    return lista;
}

int main(){
        //Variáveis
        int n = 1; // Número que vai ser adicionado
        node *lista = NULL; // Lista
        while(n!=0){
                printf("Que numero adicionar?\n");
                scanf("%d", &n);
                lista = insert(lista, n);
}
    
19.10.2018 / 17:22