#include "lista_encad.h"

/*
* =================================================
*    Filename:  .c
* Description:
*     Created:  dd/mm/18 hh:mm
* =================================================
*/

struct no {
	int info;
	struct no * prox;
};

Lista cria_lista()
{
	return NULL;
}

int lista_vazia(Lista lst)
{
	if(lst == NULL)
		return 1;
	return 0;		/* lst não vazia  */
}

int insere_elem(Lista *lst, int elem)
{
	/* Aloca um novo nó  */
	Lista N = (Lista) malloc(sizeof(struct no));
	if(N == NULL)
		return 0;

	/* Preenche os campos do novo nó  */
	N->info = elem; /* Insere o conteúdo (valor do elem)  */
	N->prox = *lst; /* Aponta para o 1º nó atual da lista  */
	*lst = N;  /* Faz a lista apontar para o novo nó  */
	return 1;
}

int remove_elem(Lista *lst, int elem)
{
	if(lista_vazia(*lst))
		return 0;

	Lista aux = *lst; /* Ponteiro auxiliar para o 1º nó  */
	/* Trata elemento = 1º nó da lista  */
	if(elem == (*lst)->info)
	{
		*lst = aux->prox; /* Lista aponta para o 2º nó */
		free(aux);
		return 1;
	}
	/* Percorrimento até achar o elem ou final da lista */
	while(aux->prox != NULL && aux->prox->info != elem)
		aux = aux->prox;

	if(aux->prox == NULL) /* Final da lista  */
		return 0;
	/* Remove elemento != 1º nó da lista */
	Lista aux2 = aux->prox; /* Aponta nó a ser removido  */
	aux->prox = aux2->prox; /* Retira nó apontado p/ aux2 da lista */
	free(aux2);
	return 1;
}

void print_lista(Lista lst)
{
	Lista temp;
	temp = lst;
	printf("Lista = {");
	while(temp != NULL)
	{
		printf("%d ", temp->info);
		temp = temp->prox;
	}
	printf("}\n");
}

