I have a problem where my list is removing all the elements and leaving only the last and penultimate.
#include <stdio.h>
#include <stdlib.h>
typedef struct LISTA{
int dado;
struct LISTA *prox;
}lista;
lista *insere(lista *p, int valor){
lista *novo;
novo=(lista*)malloc(sizeof(lista));
novo->dado = valor;
novo->prox = p;
return novo;
}
void imprime(lista *p){
lista *novo;
for(p = novo; p!= NULL; p=p->prox){
printf("%d",p->dado);
}
}
/*lista *retira(lista *p, int valor){
lista *aux = NULL;
lista *novo = p;
while(novo != NULL && novo->dado != valor){
aux = novo;
novo = novo->prox;
}
if(novo == NULL){
return p;
}
if(aux == NULL){
novo = novo->prox;
}else{
aux->prox = novo->prox;
}
free(novo);
return p;
}*/
lista *retiraFirst(lista *l){
lista *tmp = l;
tmp = l->prox;
l->prox = tmp->prox;
l->prox--;
return tmp;
}
lista *retiraLast(lista *l){
lista *ultimo = l,
*penultimo = l;
while(ultimo->prox != NULL){
penultimo = ultimo;
ultimo = ultimo->prox;
}
penultimo->prox = NULL;
ultimo->prox= penultimo;
return ultimo;
}
main(){
lista *l;
lista *primeiro, *ultimo;
l = NULL;
l = insere(l, 20);
l = insere(l, 30);
l = insere(l, 40);
l = insere(l, 50);
l = insere(l, 60);
imprime(l);
printf("----");
//l =retira(l, 40);
//l = retiraFirst(l);
//imprime(l);
printf("----");
l = retiraLast(l);
imprime(l);
}