Boa noite, galera. Gostaria de uma ajudinha em completar a funcao abaixo. Só consegui remover os “anos” que repetem da lista, o resto estou quebrando a cabeça. Quem puder ajudar, ficarei muito grato.
separa_ano – a função recebe a lista encadeada (ou seja, o endereço do
primeiro nó da lista) e um ano, e MODIFICANDO a lista original, retorna uma
(sub)lista encadeada somente com os livros daquele ano. Não devem ser criados
novos nós. O trecho correspondente aos livros desse ano deve ser “cortado” da
lista original. A lista original deve ser “emendada”, e o endereço do primeiro nó do
trecho (sublista) arrancado deve ser retornado ( sendo necessário colocar NULL no
campo prox do último nó dessa (sub)lista ). A sua função deve levar em conta a
ordenação da lista original. A função retorna o endereço do primeiro nó da (sub)
lista resultante. Para facilitar, considere que o ano solicitado nunca é o do
primeiro livro ou do último livro. Se não existir nenhum livro para o ano recebido,
a função retorna NULL.
typedef struct noDaLista NoDaLista;
struct noDaLista
{
char titulo[51];
char autor[51];
int ano;
int quantidade;
NoDaLista *prox;
};
NoDaLista* separa_ano( NoDaLista *lista, int ano) {
NoDaLista *p, *a;
p = lista;
a = NULL;
NoDaLista *novo = (NoDaLista *)malloc(sizeof(NoDaLista));
while(p != NULL)
{
if(p->ano == ano)
{
a->prox = p->prox;
free(p);
p = a;
}
a = p;
p = p->prox;
}
return lista;
}