/* Apunto el nodo actual al nuevo nodo. */
list->current = node;
/* Si la lista está vacía hay que hacer apuntar todo al nuevo nodo. */
- if (DLList_empty(list)) {
+ if (list->first == NULL) {
list->first = node;
list->last = node;
/* Si no está vacía. */
/* Apunto el nodo actual al nuevo nodo. */
list->current = node;
/* Si la lista está vacía hay que hacer apuntar todo al nuevo nodo. */
- if (DLList_empty(list)) {
+ if (list->first == NULL) {
list->first = node;
list->last = node;
/* Si no está vacía. */
void* data = node->data;
/* Pongo como primer nodo al siguiente. */
list->first = node->next;
- /* Pongo el nodo anterior al primero como NULL. */
- list->first->prev = NULL;
- /* Lo pongo como nodo actual. */
+ /* Pongo al primero como nodo actual. */
list->current = list->first;
- /* Si era el único actualizo los otros punteros. */
+ /* Si era el único pongo el último en NULL. */
if (!list->first) {
- list->last = NULL;
- list->current = NULL;
+ list->last = NULL;
+ /* Si no, pongo el anterior en NULL. */
+ } else {
+ list->first->prev = NULL;
}
/* Libero memoria del nodo. */
free(node);
void* data = node->data;
/* Pongo como último nodo al anterior. */
list->last = node->prev;
- /* Pongo el nodo siguiente al último como NULL. */
- list->last->next = NULL;
- /* Lo pongo como nodo actual. */
+ /* Pongo al último como nodo actual. */
list->current = list->last;
- /* Si era el único actualizo los otros punteros. */
+ /* Si era el único pongo el primero en NULL. */
if (!list->last) {
- list->first = NULL;
- list->current = NULL;
+ list->first = NULL;
+ /* Si no, pongo el siguiente en NULL. */
+ } else {
+ list->last->next = NULL;
}
/* Libero memoria del nodo. */
free(node);
/**
* Saca el primer elemento de la DLList.
* Elimina el primer elemento de la DLList devolviendo su contenido.
+ * Ejemplo:
+ * \code
+ * DLList* l;
+ * char* data;
+ * ...
+ * while (!DLList_empty(l)) {
+ * data = DLList_shift(l);
+ * printf("El elemento actual es '%s'.\\n", data);
+ * }
+ * \endcode
*
* \param list DLList de la cual sacar el elemento.
*
* \return Primer elemento de la DLList.
- * \see DLList_push(), DLList_shift(), DLList_unshift()
+ * \see DLList_empty(), DLList_pop()
* \pre La DLList debe estar \ref DLList_init "inicializada" y no
- * \ref DLList_empty "vacía".
+ * \ref DLList_empty "vacía.
* \post El puntero interno de la DLList apunta primer elemento.
*/
void* DLList_shift(DLList* list);
/**
* Saca el último elemento de la DLList.
* Elimina el último elemento de la DLList devolviendo su contenido.
+ * Ejemplo:
+ * \code
+ * DLList* l;
+ * char* data;
+ * ...
+ * while (!DLList_empty(l)) {
+ * data = DLList_pop(l);
+ * printf("El elemento actual es '%s'.\\n", data);
+ * }
+ * \endcode
*
* \param list DLList de la cual sacar el elemento.
*
- * \return último elemento de la DLList.
- * \see DLList_push(), DLList_shift(), DLList_unshift()
+ * \return Último elemento de la DLList.
+ * \see DLList_empty(), DLList_shift()
* \pre La DLList debe estar \ref DLList_init "inicializada" y no
- * \ref DLList_empty "vacía".
+ * \ref DLList_empty "vacía.
* \post El puntero interno de la DLList apunta último elemento.
*/
void* DLList_pop(DLList* list);