Eliminar por pos ordinal
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