Eliminar por pos ordinal

 avatar
unknown
c_cpp
2 months ago
1.4 kB
10
Indexable
#include <stdio.h>

struct Nodo {
    TipoElemento datos;
    int siguiente;
    int anterior;
}

struct ListaRep {
    struct Nodo *cursor;
    int inicio;
    int libre;
    int cantidad;
}

int l_eliminar(Lista lista, int pos) {
    int p = -1; // pos fisica tomada a retornar
    int aux;
    int actual = lista->inicio;
    if (1 <= pos && pos <= l_longitud(lista)) {
        if (pos == 1) {
            p = actual;
            lista->inicio = lista->cursor[actual].siguiente;
            lista->cursor[p].siguiente = lista->libre;
            lista->libre = p;
        } else {
            // recorro hasta el nodo anterior a eliminar (-1 porque pos va de 0 a n-1, -1 porque queremos el anterior)
            for (int i = 0; i < pos - 2; i++) {
                actual = lista->cursor[actual].siguiente;
            }
            p = lista->cursor[actual].siguiente; // pos de elemento a borrar
            lista->cursor[actual].siguiente = lista->cursor[p].siguiente; // C
            aux = lista->cursor[p].siguiente; // D
            lista->cursor[aux].anterior = actual;
            lista->cursor[p].anterior = NULO; // B
            lista->cursor[p].siguiente = lista->libre; // A
            lista->libre = p;
        }
        lista->cantidad--;
    }
    return p; // si nunca elimino dara -1, sino pos. fisica
}

int main() {
    // llamada de funciones
    return 0;
}
Editor is loading...
Leave a Comment