Iterador para aplanar una lista anidada

Implementa una clase iteradora para aplanar una lista anidada de listas de enteros. Cada elemento de la lista es un entero o una lista. Puede haber muchos niveles de listas anidadas dentro de listas.

La clase se inicializa con una lista anidada. También tiene dos métodos:

  1. next() devuelve un entero en el orden en que aparece.
  2. hasNext() devuelve True / False según si ya se recuperaron todos los enteros o no.

Escribe la implementación de la clase para los tres métodos requeridos.

Ejemplos

ni, actual = NestedIterator([[1, 1], 2, [1, 1]]), []
while ni.hasNext():
    actual.append(ni.next())
actual ➞ [1, 1, 2, 1, 1]

ni, actual = NestedIterator([1, [4, [6]]]), []
while ni.hasNext():
    actual.append(ni.next())
actual ➞ [1, 4, 6]

ni, actual = NestedIterator([[[]], []]), []
while ni.hasNext():
    actual.append(ni.next())
actual ➞ []

Notas

N/A