]> git.llucax.com Git - z.facultad/75.42/calculadora.git/blobdiff - dllist.c
Se agregan svn keywords.
[z.facultad/75.42/calculadora.git] / dllist.c
index 5a190a4419fe95e13a124e2e2287c275ccb4b73e..8b427dcb2724653c5c8d1792ca43f2f77c7b234a 100644 (file)
--- 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;
+}
+