Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   C/C++ (http://www.forosdelweb.com/f96/)
-   -   Funcion Insertar en Lista (http://www.forosdelweb.com/f96/funcion-insertar-lista-576130/)

JocDev 15/04/2008 07:57

Funcion Insertar en Lista
 
Hola visto este codigo para insertar nodos ordenadamente en una lista cerrada
void Insertar (Lista *lista, int v)
{
pNodo nuevo, anterior;
nuevo = new tipoNodo;
nuevo->valor = v;
if(ListaVacia(*lista) || (*lista)->valor > v)
{
nuevo->siguiente = *lista; //nuevo->siguiente= lo q apunta lista.
*lista = nuevo; //aca cambias el valor de lista.
}
else
{
anterior = *lista; //anterior = lo q apunta lista.
//Aca esta mi duda que condicion se cumple en anterior->siguiente
while(anterior->siguiente && anterior->siguiente->valor <= v)
{
anterior = anterior->siguiente;
}
nuevo->siguiente = anterior->siguiente;
anterior->siguiente = nuevo;
}
}

Mi duda es en el while. Que condicion se cumple en la siguiente linea?
while(anterior->siguiente && ...
Una se que es que verifica que el valor del nodo sea menor igual al valor enviado
pero con anterior->siguiente que?? Gracias

Leber 15/04/2008 08:21

Re: Funcion Insertar en Lista
 
Al ser una condicion AND, y al evaluarse de izquierda a derecha, si la primera condicion ya no se cumple, ya no se evalua la siguiente, por eso primero si mira si anterior->siguiente no apunta a NULL, si la condicion estuviera al reves no funcionaria.

JocDev 15/04/2008 15:43

Re: Funcion Insertar en Lista
 
Ahh entiendo ahora entonces esto no corresponde a una lista cerrada porque uno de los nodos apunta a null verdad??

ernestobalestrini 17/04/2008 19:52

Re: Funcion Insertar en Lista
 
Cita:

Iniciado por JocDev (Mensaje 2365350)
Ahh entiendo ahora entonces esto no corresponde a una lista cerrada porque uno de los nodos apunta a null verdad??

Si el ultimo nodo o elemento de la lista apunta a vacio o null esto quiere decir que tu lista es Simple

nodo1 -> nodo2 -> nodo3 -> nodon ->NULL

fran_tatengue 19/04/2008 14:33

Re: Funcion Insertar en Lista
 
Yo lo que haria es hacer lo siguiente

/*...
.
.
.

while(anterior->siguiente != NULL....
.
.
.
...*/

nada mas que para mi es mucho mas claro y legible y ademas no se si "anterior->siguiente" puesto antes del "&&" cuasa efecto porque creo que tenes que tener mas cuidadado, "anterior->siguiente" es un puntero que apunta a una direccion de memoria, eso puede ser un entero que esta haciendo fallar la condicion, en cambio haciendo "while(anterior->siguiente != NULL...." obtenes un valor booleano que es lo que necesita una condicion and teoricamente.


La zona horaria es GMT -6. Ahora son las 20:49.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.