Examen Febrero 2023 - Ejercicio 2 parte a)

Examen Febrero 2023 - Ejercicio 2 parte a)

de Libertad Tansini -
Número de respuestas: 0

Hola Rafael, tenés razón respecto a tus comentarios sobre la operación eliminar: 1) El nodo aEliminar debe ser iter->sig y no iter 2) No está contemplada la situación en que, cuando el nodo a eliminar es el mas reciente se actualice c->primero, esto es, como está planteada la solución c->primero quedaría apuntando a "basura"

Te mando una nueva versión de "eliminar" con las modificaciones y teniendo en cuenta que en el primer while también se pueden haber eliminado todos los comentarios.

saludos, libertad

-------------------------------

// Pos: elimina todos los comentarios eventualmente recibidos sobre el artículo dado
void eliminar(Comentarios &c, unsigned int idArticulo){
      while (c->ultimo != NULL && c->ultimo->id == idArticulo){
            nodo* aEliminar = c->ultimo;
            c->ultimo -> c->ultimo->sig;
            delete aEliminar;
            c->cantidad--;
      }
      if (c->cantidad==0) c->primero=NULL;
      if (c->ultimo != NULL){
            nodo* iter = c->ultimo;
            while (iter->sig != NULL){
                  if (iter->sig->id == idArticulo){
                        nodo* aEliminar = iter->sig;
                        iter->sig = iter->sig->sig;
                        if (iter->sig==NULL) c->primero=iter;
                        delete aEliminar;
                        c->cantidad--;
                        }
                        iter = iter->sig;
            }
      }
}

-------------------------------