"...Muchas gracias por las molestias que te estas tomando..."
De nada hombre, estamos a domingo por la tarde y no tengo nada mejor que hacer :)
Personalmente separaría la funcion de reserva de memoria por si fuese necesario implementar la opcion de ampliar la lista, y sobretodo haz comprovaciones de error. Pongo el ejemplo de como haría el constructor (es una forma de las mil que hay)
Código:
Lista :: Lista (int nnodos) {
if(reserva(nnodos) != nnodos) {
//condicion de error
}
numnodos += nnodos;
}
int Lista::reserva(int nnodos) {
Nodo *nuevo, *anterior;
int reservados = 0;
anterior = p;
for(int i=0; i<nnodos; i++) {
nuevo = new (nothrow) Nodo;
if(!nuevo) {
break;
}
nuevo->valor = 0;
nuevo->siguiente = 0;
if(anterior) {
anterior->siguiente = nuevo;
}
else {
p = nuevo;
}
anterior = nuevo;
reservados++;
}
return reservados;
}
Y el destructor tal como te comenté: para cada new necesitas un delete
Código:
Lista::~Lista() {
Nodo *ptr, *sig;
ptr = p;
while(ptr) {
sig = ptr->siguiente;
delete ptr;
ptr = sig;
}
numnodos = 0;
p = 0;
}
Saludos
vosk