Problema con check_neighbors_alive

Problema con check_neighbors_alive

de Jerónimo Ismael Acosta Monteavaro -
Número de respuestas: 3

Buenos días,

Si no me equivoco, la función check_neighbors_alive:
* nunca elimina al primer vecino de la lista, y
* cada vez que elimina un vecino, saltea al siguiente (no lo actualiza ni lo elimina).

Saludos,
-Jero

En respuesta a Jerónimo Ismael Acosta Monteavaro

Re: Problema con check_neighbors_alive

de Matias Richart -
Hola Jerónimo,

La estructura está pensada como una lista con un primer elemento "dummy".
Si ves, en la función de inicialización del router, se crea con un primer elemento 'zero'.

Entonces, tanto en el chequeo como en el borrado, se tiene esto en cuenta y se mira uno para adelante en la búsqueda y al borrar se pasa el puntero al nodo anterior a borrar.

Si seguís viendo un problema luego de esta aclaración avisame y vuelvo a revisar el código.

Saludos
En respuesta a Matias Richart

Re: Problema con check_neighbors_alive

de Jerónimo Ismael Acosta Monteavaro -
Hola profe,

No consideré ese vecino dummy. Mi primer punto no es correcto.

Respecto al salteo de vecinos, creo que sí sucede.

Supongamos que se invoca check_neighbors_alive con la siguiente lista de vecinos:

Dummy -> A -> B -> NULL

Supongamos además que A y B deben ser eliminados.
La primera iteración del while en la función eliminará al vecino A mediante delete_neighbor, dejando a la lista así:

Dummy -> B -> NULL

En la siguiente iteración, ptr avanza a ptr->next:

Dummy -> B -> NULL

Entonces, se verifica que ptr->next == NULL, y la función retorna sin eliminar al vecino B como debería.

Saludos