ft_lstmap

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
}

Deixe um comentário