#include "2_lista_din_encad_duplo.h"

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

Lista cria_lista()
{
	return NULL;
}

int lista_vazia(Lista lst)
{
	if(lst == NULL)
		return 1;
	return 0;
}

int insere_final(Lista *lst, int elem)
{
	Lista N = (Lista) malloc(sizeof(struct no));
	if(N == NULL)
		return 0;

	N->info = elem;
	if(lista_vazia(*lst))
	{
		N->prox = *lst; /* Novo nó aponta para ele mesmo */
		*lst = N; /* Lista aponta pro novo nó (o ultimo) */
	}

	else
	{
		N->prox = (*lst)->prox; /* Faz o novo nó apontar pro primeiro */
		(*lst)->prox = N; /* Faz o ultimo no apontar pro novo */
		*lst = N; /* Faz a lista apontar pro novo nó (o ultimo) */
	}
	return 1;
}

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

	Lista aux = (*lst)->prox; /* Aponta pro 1º nó */
	*elem = aux->info; /* Retorna valor do nó a ser removido */

	if(*lst == (*lst)->prox)
		*lst = NULL; /* Lista com só 1 nó */
	else
		(*lst)->prox = aux->prox;

	free(aux);
	return 1;
}
