Estás enfocándote solo en una parte del if-else. Veamos:
Código: text
1.- Cuando creas una instancia Pila, su campo raiz es null.
2.- Cuando ejecutas por primera vez Insertar(...) sobre la instancia de Pila entonces se ejecuta el primer bloque de este if-else. Aquí raiz por primera vez referencia a una instancia Nodo. Esta instancia de Nodo no tiene un nodo que le siga (su campo sig es null)
3.- Cuando vuelves ejecutar Insertar(...) sobre la instancia de Pila entonces se ejecuta el segundo bloque de este if-else. Ahora raiz referencia a una NUEVA instancia de Nodo. Esta NUEVA instancia de Nodo si tiene un nodo que le siga (el nodo al que raiz referenciaba en el paso 2).
4.- Si vuelves a ejecutar Insertar(...), vuelve a repetirse el paso 3.
La respuesta a tu primer pregunta es porque así está diseñado. El primer Nodo ingresado siempre va a referenciar a null.
Por esta razón el método Imprimir() recorre los Nodos hasta que encuentra null.
¿Para que la lista no se extienda infinitamente?: si
if (raiz == null)
{
nuevo.sig = null;
raiz = nuevo;
}
else
{
nuevo.sig = raiz;
raiz = nuevo;
}
1.- Cuando creas una instancia Pila, su campo raiz es null.
2.- Cuando ejecutas por primera vez Insertar(...) sobre la instancia de Pila entonces se ejecuta el primer bloque de este if-else. Aquí raiz por primera vez referencia a una instancia Nodo. Esta instancia de Nodo no tiene un nodo que le siga (su campo sig es null)
3.- Cuando vuelves ejecutar Insertar(...) sobre la instancia de Pila entonces se ejecuta el segundo bloque de este if-else. Ahora raiz referencia a una NUEVA instancia de Nodo. Esta NUEVA instancia de Nodo si tiene un nodo que le siga (el nodo al que raiz referenciaba en el paso 2).
4.- Si vuelves a ejecutar Insertar(...), vuelve a repetirse el paso 3.
La respuesta a tu primer pregunta es porque así está diseñado. El primer Nodo ingresado siempre va a referenciar a null.
Por esta razón el método Imprimir() recorre los Nodos hasta que encuentra null.
¿Para que la lista no se extienda infinitamente?: si

