Implementación de listas en lazadas en c++


#include <iostream>

using namespace std;

struct TNodo{
    int datos;
    TNodo* siguiente;
};

TNodo *inicial, *final;

void insertar(int dato){
    TNodo* nuevo = new TNodo{dato, NULL};
    final->siguiente = nuevo;
    final = final->siguiente;
}

void insertar_medio(TNodo* pos, int dato){
    TNodo* nuevo = new TNodo{dato, NULL};
    nuevo->siguiente = pos->siguiente;
    pos->siguiente = nuevo;
}

void borrar(TNodo *pos){
    TNodo *actual = inicial;

    while(actual->siguiente != pos && actual->siguiente != NULL){
        actual = actual->siguiente;
    }

    if(actual->siguiente != NULL){
        actual->siguiente = pos->siguiente;

    }
    else{
        actual->siguiente = NULL;
    }

    delete(pos);
}


int main()
{

    //Creamos los punteros al inicio y final de la lista
    inicial = NULL;
    final = inicial;

    //Creamos el primer elemento de la lista
    TNodo *nuevo = new TNodo{0, NULL};
    inicial = nuevo;
    final = inicial;

    //Insertamos mas elementos en la lista
    for(int i = 1; i < 11; i++){
        insertar(i);
    }

    //Buscamos una posición intermedia donde hacer la inserción
    TNodo *actual = inicial;
    for(int i = 0; i < 5; i++){
        actual = actual->siguiente;
    }

    //Insertamos un nuevo elemento en medio de la lista
    insertar_medio(actual, 23);

    //Mostramos el contenido de la lista
    actual = inicial;
    for(int i = 0; i < 11; i++){
        actual = actual->siguiente;
        cout<<actual->datos<<"\t";
    }

    cout<<"\nBorrando nodo recien insertado\n";

    //Buscamos la posicion del elemento recien insertado
    actual = inicial;
    for(int i = 0; i < 6; i++){
        actual = actual->siguiente;
    }
    TNodo *borrar_ptr = actual;

    //Borramos el elemento recien insertado (en medio de la lista)
    borrar(borrar_ptr);

    //Volvemos a mostrar la lista
    TNodo *nodo = inicial;
    while(nodo->siguiente != NULL){
        nodo = nodo->siguiente;
        cout<<nodo->datos<<"\t";
    }

    //Borramos la lista
    nodo = inicial->siguiente;
    inicial = NULL;
    delete(inicial);

    while(nodo != NULL){
        TNodo *borrar = nodo;
        nodo = nodo->siguiente;
        delete(borrar);
    }
    delete(nodo);

    //Nos aseguramos de que la lista se ha borrado bien
    if(inicial == NULL) cout<<"\nlista borrada\n";

    return 0;
}

Comentarios

Entradas populares de este blog