X-Git-Url: https://git.llucax.com/z.facultad/75.42/calculadora.git/blobdiff_plain/14e3bef578b8abe6d15cc7beb727df23122be421..7dc1a91d07974a66011ba31fffd4b6c36b7969cb:/dllist.c?ds=inline diff --git a/dllist.c b/dllist.c index 5a190a4..8b427dc 100644 --- a/dllist.c +++ b/dllist.c @@ -38,9 +38,9 @@ void DLList_delete(DLList* list) { while (!DLList_empty(list)) { DLList_pop(list); } - /* Libero memoria de la lista. */ - free(list); } + /* Libero memoria de la lista. */ + free(list); } bool DLList_empty(DLList* list) { @@ -187,3 +187,31 @@ void* DLList_pop(DLList* list) { return data; } +void* DLList_remove_current(DLList* list) { + /* Nodo actual */ + DLNode* current = list->current; + /* Datos del nodo actual. */ + void* data = current->data; + /* Si tiene siguiente. */ + if (current->next) { + /* Se pone como anterior del siguiente al anterior del actual. */ + current->next->prev = current->prev; + /* Si no tiene siguiente, se pone como último al anterior del actual. */ + } else { + list->last = current->prev; + } + /* Si tiene anterior. */ + if (current->prev) { + /* Se pone como siguiente del anterior al siguiente del actual. */ + current->prev->next = current->next; + /* Si no tiene anterior, se pone como primero al siguiente del actual. */ + } else { + list->first = current->next; + } + /* Pongo como elemento actual al próximo elemento. */ + list->current = current->next; + /* Libero memoria del nodo. */ + free(current); + return data; +} +