PI-ITBA / 2024_02

Consultas 2C 2024
4 stars 0 forks source link

listUnion #122

Open JuaniRaggio opened 1 month ago

JuaniRaggio commented 1 month ago

El ejercicio es el 8 de la guia de listas, pedia hacer una funcion que cree otra lista en base a los dos parametros y que la misma sea la union ordenada de las otras dos. Queria saber si estaba bien, el test me dio el ok pero me parecio que el codigo me quedo bastante feo, hay alguna otra forma de hacerlo?

TList listUnion  (const TList list1, const TList list2) {
    if (list1 == NULL && list2 == NULL) {
        return NULL;
    }
    TList newElement = malloc(sizeof(*newElement));
    if (list1 != NULL && list2 != NULL) {
        if (list1->elem < list2->elem) {
            newElement->elem = list1->elem;
            newElement->tail = listUnion(list1->tail, list2);
        } else if (list1->elem > list2->elem) {
            newElement->elem = list2->elem;
            newElement->tail = listUnion(list1, list2->tail);
        } else {
            newElement->elem = list2->elem;
            newElement->tail = listUnion(list1->tail, list2->tail);
        }
    } else if (list1 != NULL) {
        newElement->elem = list1->elem;
        newElement->tail = listUnion(list1->tail, list2);
    } else {
        newElement->elem = list2->elem;
        newElement->tail = listUnion(list1, list2->tail);
    }
    return newElement;
}
marcelogarberoglio commented 1 month ago

Está bien pero hay algo de código repetido. En vez de separar por "ninguno es null" por un lado podrías armar los if para tener los tres casos posibles 1) ¿Hay que copiar sólo de list1? (se acabó list2 o no se acabó list1 y es menor que list2) 2) ¿Hay que copiar sólo de de list2? Sinó -> son iguales