[Parcial][Mayo][2017][ - Ejercicio 1]

[Parcial][Mayo][2017][ - Ejercicio 1]

de Daniel Agustin Freire Caporale -
Número de respuestas: 2

Hola,

Tengo un par de consultas, que son más bien generales, pero que me surgieron mientras resolvía el ejercicio 1 del parcial de Mayo de 2017. Tengo una duda por cada parte del ejercicio.

1)a)

¿Necesito la variable iterador? Pregunto, porque como L es pasado por valor (no por referencia), es una copia del puntero. O sea, si en algún lugar recorro la lista haciendo L=L->sig, no "pierdo" la lista original. ¿Estoy en lo cierto?

Por si acaso, lo que había hecho es:

    Lista mayor (Lista L){
        Lista res=L;
        while (L->sig!=NULL){
            if (L->sig->dato>res->dato)
                res = L->sig;
            L=L->sig;
        }
        return res;
    }


1)b)

¿Es correcto usar el condicional de == o != entre punteros? Porque para evitar unas operaciones, en mi solución, comparo si dos punteros son distintos. Lo copio para explicarme mejor:

    void ordenar (Lista &L){
        Lista aux=L;    // a diferencia de la parte 1)a), aqui si copio la lista porque fue pasada por referencia
        while (aux->sig!=NULL){
            max = mayor(aux);
            if (max!=aux){     // AQUI ESTA MI DUDA!
              int val = aux->dato;
              aux->dato=max->dato;
              max->dato=val;
            }
          aux=aux->sig;
        }
    }


Disculpen la molestia y quedo atento a cualquier ayuda que me puedan brindar.

Saludos!



En respuesta a Daniel Agustin Freire Caporale

Re: [Parcial][Mayo][2017][ - Ejercicio 1]

de Matias Fabian Rodriguez Acosta -

Ojalá puedas leer esto antes del parcial...con respecto a tus preguntas de la parte a, para mi está bien asi y efectivamente al ser pasada por valor, no se pierde.

Con respecto a la parte b....no, no se pueden comparar dos punteros así, tenes que comparar el dato.

(pd: en la cuarta linea te faltó antes de max la palabra "Lista", ojo esos detalles para el parcial)

Abrazo!

En respuesta a Matias Fabian Rodriguez Acosta

Re: [Parcial][Mayo][2017][ - Ejercicio 1]

de Daniel Agustin Freire Caporale -

Hola, Matias! Muchas gracias! Sí, llegó a tiempo tu respuesta!

¿O sea que un puntero solo lo puedo comparar (== o != nada más) con NULL? Es que en algunas páginas encontré info como esta:

https://en.cppreference.com/w/cpp/language/operator_comparison#Pointer_comparison_operators

Capaz que, como en el curso usamos C con algunos complementos de C++, no tenemos permitido nosotros usar == o != entre dos punteros que no sean NULL.

Ah! Importantísimo el detalle de la palabra "Lista"! Gracias!

Saludos!