Buenas . Una consulta en general en el tema de las listas. Por qué en una función que modifica la lista , la misma la debo pasar como referencia? No entiendo por qué es así , si en el caso de los punteros una copia del puntero apunta a lo mismo que el original.
Hola Jose.
Si tomás a una lista como el puntero al (eventualmente) primer elemento (nodo), solo vas a poder cambiar la dirección del primero en una función si pasás este puntero por referencia; por ejemplo si querés insertar un elemento (nodo) al comienzo de una lista (mirá el teórico o resumen de teórico sobre el tema). Si tu función retorna la lista actualizada, acá no es necesario el pasaje por referencia, ya que la lista resultante se retorna. No obstante, si por ejemplo definís un procedimiento que modifica la lista parámetro, acá se necesitás el pasaje por referencia. Ejemplo:
void insComienzo(T e, Lista & l){
Lista nuevo = new nodoLista;
nuevo -> info = e;
nuevo -> sig = l;
l = nuevo;
}
Si sacás el "&", observá que al usar insComienzo con una lista, el elemento parámetro no se va a insertar en la lista, ya que no podrías cambiar el puntero al nuevo primer elemento (la asignación "l = nuevo" no tendría el efecto deseado al salir).
Saludos, Carlos