Subject
Nome da função: ft_lstmap
Protótipo: t_list *ft_lstmap(t_list *lst, void (f)(void *), void (*del)(void *));
Parâmetros:
- #1. O endereço de um ponteiro para um elemento.
- #2. O endereço da função usada para iterar a lista.
- #3. O endereço da função usada para deletar o conteúdo de um elemento se necessário.
Valor de retorno: A nova lista. NULL se a alocação falhar.
Funções externas: malloc, free.
Descrição: Itera a lista ‘lst’ e aplica a função ‘f’ no conteúdo de cada elemento. Cria uma nova lista resultada das sucessivas aplicações da função ‘f’. A função ‘del’ é usada para deletar o conteúdo de um elemento se necessário.
Rascunho
A descrição já explica bem o que deve ser feito. Se fizéssemos um main assim:
~fazer o main
O resultado seria:
a
Código
t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *))
{
t_list *new_list; //nova lista
t_list *aux_old; //auxiliar da antiga lista
t_list *aux_new; //auxiliar da nova lista
if (!lst) //checando se existe
return (NULL);
if (!(new_list = ft_lstnew((*f)(lst->content)))) //checando
return (NULL);
aux_new = new_list; //igualando endereços
aux_old = lst->next;
while (1) //enquanto for verdadeiro
{
if (aux_old == NULL)
break ;
if (!(aux_new->next = ft_lstnew((*f)(aux_old->content))))
{ //se não for igual da função f
ft_lstclear(&new_list, del); //apaga
return (NULL);
}
aux_new = aux_new->next; //avança
aux_old = aux_old->next; //avança
}
return (new_list); //retornando a nova lista
}