/* * linked_list.h - Implementación básica de Lista Enlazada Simple * * Inspirado en "Data Structures and Algorithms Made Easy" * por Narasimha Karumanchi. * * Define un TAD de lista enlazada simple con operaciones * fundamentales y sus versiones recursivas para fines didácticos. */ #ifndef LINKED_LIST_H #define LINKED_LIST_H #include /* ===== ESTRUCTURA DE NODO ===== */ typedef struct _list_node { int data; struct _list_node *next; } ListNode; /* ===== CREACIÓN ===== */ /* Crea un nuevo nodo con el dato especificado */ ListNode *create_list_node(int data); /* ===== INSERCIÓN ===== */ /* Inserta un nodo al inicio de la lista */ ListNode *insert_front(ListNode *head, int data); /* Inserta un nodo al final de la lista (iterativo) */ ListNode *insert_back(ListNode *head, int data); /* Inserta un nodo al final de la lista (recursivo) */ ListNode *insert_back_rec(ListNode *head, int data); /* Inserta un nodo en la posición dada (0 = inicio, iterativo). * Retorna el nuevo head. */ ListNode *insert_at(ListNode *head, int position, int data); /* Inserta un nodo en la posición dada (0 = inicio, recursivo). * Retorna el nuevo head. */ ListNode *insert_at_rec(ListNode *head, int position, int data); /* ===== ELIMINACIÓN ===== */ /* Elimina el primer nodo con el valor dado (iterativo). * Retorna el nuevo head. */ ListNode *delete_value(ListNode *head, int data); /* Elimina el primer nodo con el valor dado (recursivo). * Retorna el nuevo head. */ ListNode *delete_value_rec(ListNode *head, int data); /* Elimina el nodo en la posición dada (0 = inicio, iterativo). * Retorna el nuevo head. */ ListNode *delete_at(ListNode *head, int position); /* ===== BÚSQUEDA ===== */ /* Busca un valor en la lista (iterativo). * Retorna true si se encontró, false si no. */ bool search(ListNode *head, int data); /* Busca un valor en la lista (recursivo). * Retorna true si se encontró, false si no. */ bool search_rec(ListNode *head, int data); /* ===== TAMAÑO ===== */ /* Devuelve el número de elementos en la lista (iterativo) */ int size_list(ListNode *head); /* Devuelve el número de elementos en la lista (recursivo) */ int size_list_rec(ListNode *head); /* ===== DESTRUCCIÓN ===== */ /* Libera toda la memoria asociada a la lista (iterativo) */ void destroy_list(ListNode *head); /* Libera toda la memoria de la lista (recursivo) */ void destroy_list_rec(ListNode *head); /* ===== IMPRESIÓN ===== */ /* Imprime los elementos de la lista (iterativo) */ void print_list(ListNode *head); /* Imprime los elementos en orden (recursivo) */ void print_list_rec(ListNode *head); /* Imprime los elementos en orden inverso (recursivo) */ void print_list_inverso_rec(ListNode *head); /* ===== OPERACIONES AVANZADAS ===== */ /* Invierte la lista (recursivo). * Retorna el nuevo head. */ ListNode *invert_list_rec(ListNode *head); /* Compara dos listas nodo a nodo (recursivo). * Retorna true si son idénticas. */ bool compare_lists_rec(ListNode *l1, ListNode *l2); #endif // LINKED_LIST_H