Estructura de Nodos, lista ligada con agregar/obtener/insertar, e iteración con __iter__ y __next__.
Al insertar, siempre asigna nodo_nuevo.siguiente = nodo_actual.siguiente antes de nodo_actual.siguiente = nodo_nuevo. Si lo haces al revés, nodo_actual.siguiente ya apunta al nuevo nodo y pierdes la referencia al resto de la lista.
El iterador recibe la cabeza al crearse y avanza por los nodos con .siguiente. La lista iterable siempre crea un nuevo iterador en __iter__() — por eso puede recorrerse múltiples veces, a diferencia del iterador solo.