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;
}
}
}