Removal List Double-chained C

0

Can anyone help me with the issue of removing a node from the linked list? I am not able to remove the elements correctly, only the last added to the list.

#include<stdio.h>
#include<stdlib.h>
#define MAX 50

typedef struct { 
    char nome[MAX]; 
    int idade, id; 
}usuario; 

typedef struct NODO{ 
    usuario *dados;
    struct NODO *proximo;
    struct NODO *anterior;
};

typedef struct{ 
    struct NODO *inicio 
}List;

void init(List *L){ 
    L->inicio = NULL; 
}

int empty(List *L) {
    if (L->inicio == NULL) 
        return 1; 
    else 
        return 0;
}

void insert(List *L, usuario *p){
    struct NODO *no = (struct NODO*) malloc(sizeof(struct NODO));
    no->dados = p;
    no->proximo = L->inicio;
    L->inicio = no;
}

void imprimir(List *L){
   struct NODO *imprimi = L->inicio; 
   if(imprimi==NULL)
        printf("LISTA VAZIA"); 
    else 
    while(imprimi!=NULL){
        printf("ID: %d | NOME: %s | IDADE: %d\n",imprimi->dados->id,imprimi->dados->nome,imprimi->dados->idade);
        imprimi=imprimi->proximo;
    }
}

void remover(List *L){

    int pValor;
    scanf("%d",&pValor);

    struct NODO *navegador = L->inicio;

    while (navegador != NULL && navegador->dados->id != pValor) {   
        navegador = navegador->proximo;
    }
        if(navegador == NULL){
        printf("ELEMENTO NAO ENCONTRADO");
        getch();
        return 1;}
    else{
        printf("ELEMENTO ENCONTRADO");
        getch();}
        if (navegador->anterior != NULL){
            navegador->anterior->proximo = navegador->proximo;} 
                    else{
                     L->inicio = navegador->proximo;}
        if (navegador->proximo != NULL){
            navegador->proximo->anterior = navegador->anterior;
    }
    free(navegador);
    return 1;


}



main(){
    int ctrl,c=0,o; 
    List L; //apelido L para a struct de inicio

    usuario p,p1,p2,p3,p4; //apelido p para a struct usuario

    p.idade = 30;
    strcpy(p.nome, "Lucas");
    p.id = 1;

    p1.idade = 25;
    strcpy(p1.nome, "Joao");
    p1.id = 2;

    p2.idade = 38;
    strcpy(p2.nome, "matheus");
    p2.id = 3;

    p4.idade = 50;
    strcpy(p4.nome,"Mario");
    p4.id= 4;

    p3.idade = 90;
    strcpy(p3.nome,"jose");
    p3.id= 5;


    while(ctrl != 0){

        system("CLS");
        printf(
        "Selecione opcao que deseja, veja nosso menu:|\n"
        "---------------------------------------------\n"
        "1 - Criar Lista      |\n"                                
        "2 - Mostrar Lista    |\n"
        "3 - Inserir Usuarios |\n"
        "4 - Deletar Usuario  |\n"
        "5 - Ordenar Idades   |\n"
        "---------------------|\n"
        "0 - SAIR DO PROGRAMA.|\n"
        "----------------------\n"

        );

        scanf("%d", &ctrl);
        switch (ctrl)
        {

            case 0:
                system("CLS");
                printf("\n\nFIM DA LISTA\n\n");
                init(&L);
                getch();
            break;
            case 1:
                system("CLS");
                printf("          \n\nLISTA CRIADA\n\n Pressione uma tecla para voltar ao menu.");      
                getch();
            break;
            case 2:
                imprimir(&L);
                getch();
            break;
            case 3:
                insert(&L,&p); //Inserindo os dados e usando o incremento como controlador dos usuários.
                insert(&L,&p1);
                insert(&L,&p2);
                insert(&L,&p4);
                insert(&L,&p3);

            break;
            case 4:
                remover(&L);
            break;

        }
    }
}
    
asked by anonymous 29.05.2018 / 01:00

0 answers