#include<stdio.h> #include<stdlib.h> #include<malloc.h> #include"linkedList.h" link* insert(link* list, link* item, int (*estInf)(void*, void*)) { if (list == NULL) { item->next = NULL; return item; } if (estInf(item->data, list->data)) { item->next = list; return item; } list->next = insert(list->next, item, estInf); return list; } link* triInsertion(link* list, int (*estInf)(void*, void*)) { if (list == NULL) return NULL; return insert(triInsertion(list->next, estInf), list, estInf); } void linkedListSort(linkedList* l, int (*estInf)(void*, void*)) { l->first = triInsertion(l->first, estInf); void setLast(link* ll) { if (ll == NULL) l->last = NULL; else if (ll->next == NULL) l->last = ll; else setLast(ll->next); } setLast(l->first); } int estInf(void* i, void* j) { return (*(int*)i <= *(int*)j ) ? 1 : 0; } void destroyInt(void* i) { free((int*)i); } int main() { int i = 1; int* k; linkedList* l = linkedListCreate(); for(i = 100 ; i > 0 ; i--) { k = (int*)malloc(sizeof(int)); *k = i; linkedListAppend(l, k); } void printInt(void* i) { printf("%d ", *((int*)i)); } linkedListApply(l, printInt); printf("\n"); linkedListSort(l, estInf); linkedListApply(l, printInt); printf("\n"); linkedListDestroy(l, destroyInt); return 0; }