Listas simples, dobles y circulares en C++

O casi, ya que C++ es un lenguaje que nunca aprendí (y que ahora debo por un curso en la universidad llamado Estructura de Datos) y cuyo código he copiado de C++ Con Clase. De cualquier manera, lo que interesa es comprender los diferentes algoritmos (recorrido, inserción, eliminación) en cada una de las listas. Al código le he agregado que en pantalla se muestren los valores que contiene cada nodo de la lista así como las direcciones de memoria de cada uno y al nodo/nodos al que está enlazado.

Por ejemplo, en la imagen de arriba, en la primera parte está la lista con 9 valores (nodos), empezando con 40 y terminando con 80. Como se puede apreciar, la dirección de memoria para el nodo que contiene a 40 es 009131C0 y la liga/enlace/siguiente que hace referencia a 00913210, valor de memoria que corresponde al nodo que contiene a 15, osea, al siguiente valor en la lista. Así se va hasta llegar al final, donde el enlace del nodo de 80 punta a NULL.  En la siguiente parte se muestra nuevamente el listado, pero ahora con el nodo que contenía al valor de 20 eliminado, por lo que se puede ver que el valor del enlace de 30 apunta a 10, manteniendo así el orden.

A mi se me hace más sencillo comprender como las listas se conforman y como los nodos se relacionan entre ellos si puedo ver los valores de referencia que hay entre ellos, cada quién tiene su método y sabe como estudia pero espero que a alguien más le sirva esto.

Como los queridos de WordPress no dejan subir muchos tipos de archivos, enlazo el archivo compreso en ZIP, sólo es de cambiarle la extensión .odt por .zip y ahí dentró habrán 3 archivos con el código.