Boa tarde!
Minha lista só está exibindo todos os valores quando coloco um elemento no início. Tipo, se eu adicionar elementos só ao final dela e pedir pra exibir, eles não aparecem.
Alguém pode me dar uma ajuda?
#include<stdio.h>
#include<stdlib.h>
typedef struct no
{
int info;
struct no *prox;
}LISTA;
LISTA *criarLista()
{
return NULL;
}
LISTA * inserirInicio(LISTA *lista, int num)
{
LISTA *novo= (LISTA*) calloc(1,sizeof(LISTA));
novo->info= num;
novo->prox=lista;
return novo;
}
void inserirFinal(LISTA *lista, int num)
{
LISTA *novo =(LISTA*) calloc(1,sizeof(LISTA));
novo->info= num;
LISTA *aux= lista;
LISTA *ant= NULL;
if(lista==NULL)
{
lista=novo;
}
else
{
while(aux!=NULL)
{
ant=aux;
aux=aux->prox;
}
ant->prox= novo;
}
}
void imprime(LISTA *lista)
{
LISTA *p;
for(p=lista; p!=NULL; p=p->prox)
{
printf(" %d\n", p->info);
}
}
void buscar(LISTA *lista, int valor)
{
LISTA *p;
for(p=lista;p!=NULL;p=p->prox)
{
if(valor==p->info)
{
printf("Valor %d encontrado!\n", valor);
}
}
}
LISTA *retira(LISTA *lista, int valor)
{
LISTA *p;
p=LISTA;
LISTA *ant=NULL;
while((p!=NULL)&&(valor!=p->info))
{
ant=p;
p=p->prox;
}
if(p==NULL)
{
return LISTA;
}
if (ant==NULL)
{
LISTA=p->prox;
}
else
{
ant->prox=p->prox;
}
free(p);
return LISTA;
}
int main()
{
LISTA *lista;
LISTA *p;
int op;
int num;
int pos;
int valor;
do
{
printf("\n\tMENU DE opções\n\n");
printf("(1) Criar Lista\n");
printf("(2) Inserir Início\n");
printf("(3) Inserir Final\n");
printf("(4) Imprimir Valores\n");
printf("(5) Buscar Valor\n");
printf("(6) Retirar valor\n");
printf("(7) Sair\n");
printf("ESCOLHA UMA OPCAO: ");
scanf("%d", &op);
switch(op)
{
case 1:
lista=criarLista();
break;
case 2:
printf("Entre com o numero que deseja inserir: ");
scanf("%d", &num);
lista=inserirInicio( lista, num);
break;
case 3:
printf("Entre com o numero que deseja inserir: ");
scanf("%d", &num);
inserirFinal(lista, num);
break;
case 4:
imprime(lista);
break;
case 5:
printf("Entre com o valor que deseja buscar: ");
scanf("%d", &valor);
buscar(lista, valor);
break;
case 6:
printf("Entre com o valor que deseja retirar: ");
scanf("%d", &valor);
lista=retira(lista, valor);
break;
case 7:
break;
}
}
while(op!=7);
}