Ola pessoal venho pedir ajuda ao pessoal que conhece um pouquinho de C no caso estou com dificuldade para implementar uma lista ligada to achando que é problema de logica ou na funçao inserirFim ou na de imprimirLista o fato é esta tudo funcionando mais quando eu adiciono um valor ao final da lista ele sobrepoe em vez de deslocar para esquerda a lista como C é mais dificil que java as veses me perco com os ponteiros se puderem ajudar eu agradeço
[code]//by Diabo Loiro
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
//Criando a estrutura
struct list
{
int iValor;
struct list *proximo;
};//não esquecer o “;”
typedef struct list Lista;//Diz que agora em vez de escrever “struct list” podemos escrever so Lista
void removerNoInicio(Lista **paramLista){
if(*paramLista == NULL)//verirfica se a lista esta vazia
printf("\nA lista ja esta vazia");
else{//senão tiver ele cria uma lista auxiliar novamente
Lista *auxiliar;
auxiliar = *paramLista;//coloca a lista atual dentro da auxiliar
*paramLista = (*paramLista)->proximo;//pega a lista e converte para *paramLista
free(paramLista);// a função free libera a memoria
}
}
//Funçao que insere no final da lista.
void inserirFim(Lista **paramLista, int v){
Lista nList;//criando ponteiro nova lista.
nList=(Lista)malloc(sizeof(Lista));//alocando o espaço em memória e usando cast.
nList->iValor = v; //atribuindo valor para n nova lista.
nList->proximo = NULL;// apontando para fim da lista
if(*paramLista == NULL){//verifica se é o final da fila
*paramLista = nList;//se for insere a nova lista no final
}else{
Lista *listaAux; //senao cria uma lista auxiliar
listaAux = *paramLista; //coloca a lista atual na lista auxiliar
while(listaAux->proximo != NULL){ //e vai percorrendo a lista ate encontrar o final ou seja NULL
listaAux = listaAux->proximo; //enquato nao acha o final ela fica colocando "as estruturas listas" na lista temporaria
}//obviamente uma ora ela vai chegar no final da lista ou seja nesta linha
listaAux->proximo = nList;//como ele ja esta no final da fila ele so adiciona a nova lista
}
}
//Esta funçao imprime toda a lista
void imprimirLista(Lista * paramList)
{
while(paramList != NULL)//enquanto nao é o final da lista leia e imprima o conteudo
{
system(“cls”);//limpa a tela
printf("\nImprimindo a Lista\n");
printf("%d", paramList->iValor);//imprimindo o valor
paramList = paramList->proximo; //apontando a lista a proxxima lista
printf("\n");
}
}
int cont=0;
//inicio do programa
main()
{
int op=0;//controla a opçao escolida pelo usuario
int tmp=0;//variavel temporaria para o valor que usuario digitar
Lista *minhaLista;// cria um ponteiro do tipo lista
minhaLista = NULL;//Seta ele com o valor NULL
while(op!=5){
system(“cls”);
printf("\nO que gostaria de fazer\n");
printf("\n1 - Inserir no fim da fila\n2-Remover o primeiro da fila\n3 - Visualizar Lista\n4- Sair\n");
scanf("%d",&op);
// inserir
if(op==1){
system(“cls”);
printf("\nQual valor deseja inserir\n");
scanf("%d",&tmp);
inserirFim(&minhaLista,tmp);
imprimirLista(minhaLista);
getch();
}
//remover
else if(op==2){
removerNoInicio(&minhaLista);
printf("\nPrimeiro item removido\n");
imprimirLista(minhaLista);
getch();
//imprime a lista
}else if(op==3){
imprimirLista(minhaLista);
getch();
}
//sai do programa
else if(op==4){
op=5;
}
}
}
[/code]
Quem quiser testa esta anexado o arquivo .c esta rodando normal so que ele sobrepoe
Obrigado.