#ifndef _LinkedList_ #define _LinkedList_ #include typedef double Data ; typedef struct Node, *List ; /* Uma lista e' um apontador para um no' */ typedef bool (*BoolFun)(Data) ; List ListMakeRange(Data a, Data b) ; int ListLength(List l) ; bool ListGet(List l, int idx, Data *res) ; List ListPutAtHead(List l, Data val) ; List ListPutAtEnd(List l, Data val) ; void ListPrint(List l) ; List ListFilter(List l, BoolFun toKeep) ; // Cria uma cópia duma lista, em que todos os nós são novos. List ListClone(List l) ; // No final de l1, acrescenta uma cópia da lista l2 (usando Clone, claro) List ListAppend(List l1, List l2) ; // Inverte uma lista, duplicando todos os nós da lista original. List ListRev(List l) ; // Inverte uma lista, aproveitando os nós da lista original. List ListRev2(List l) ; // Elimina duma lista, todos os nós com valores repetidos. // Mantenha a ordem dos elementos que ficam. // No caso dos elementos repetidos, pode eliminar as repetições que desejar. // Use a operação free. Não faz mal se a complexidade da solução for quadrática. List ListUniq(List l) ; #endif