Hola buenas noches amigos soy nuevo en el foro y quisiera pedirle su ayuda,
llevo tiempo tratando de hacer una inserción ordenada con listas doblemente ligadas,
alguien sabe como hacerla?
me puede proporcionar un algoritmo o algun codigo, solo me a salido con exito con la simple pero con doble no me sale como quisiera,
solo me enlazada los punteros de" siguiente" y el de "anterior" solo los primeros tres nodos que inserto, alguien que me ayude :(
D:
por cierto es con Clases (POO)
Sin ver el código es complicado comentar los errores.... no somos adivinos.
jaja aqui esta :D
void Celular::InsOrdenadoble(string nom, int mod)
{
Nodo *temp=new Nodo(nom, mod);
Nodo *temp2=inicio;
if(Vacia())
{
inicio=temp;
ultimo=temp;
temp->siguiente=NULL;
temp->anterior=NULL;
}
else
{
if(inicio->modelo>mod)//Cuando el nvo Nodo es menor al inicio
{
temp->siguiente=inicio;
inicio->anterior=temp;
inicio=temp;
}
else
{//Para ser insertardo en otro lugar que no sea inicio
while(temp2->siguiente!=NULL&&temp2->siguiente->modelo<=mod)
{
temp2=temp2->siguiente;
}
temp->anterior=temp2;
temp->siguiente=temp2->siguiente;
temp2->siguiente=temp->anterior;
temp2->siguiente=temp;
}
}
}
Veo que estás usando C++.
En este caso, espero que hayas implementado el constructor de la clase Nodo. Si es así, dicho constructor debería inicializar los punteros "siguiente" y "anterior" a NULL, por lo que podrías evitar el uso de determinadas líneas en el código:
if(Vacia())
{
inicio=temp;
ultimo=temp;
// Las siguientes lineas sobrarian
//temp->siguiente=NULL;
//temp->anterior=NULL;
}
Y luego, en el bucle de inserción:
temp2->siguiente=temp->anterior;
temp2->siguiente=temp;
¿No ves nada raro?
tienes razon, tengo un constructor donde inicializo anterior y siguiente y ya corregi lo del
//aux2->siguiente=aux->anterior;
aux2->siguiente=aux;
pero aun esta igual, sigue sin enlazarle el putero de anterior :(
no me sale, se me "truena" o pasa lo que comentaba al inicio
Digamos que tú tienes una lista tal que:
A <--> C
y quieres añadir B, que va en medio.
Los pasos a seguir son:
B->ant = A
B->sig = C = A->sig
C->ant = B
A->sig = B
Son 4 pasos... y tu estás haciendo únicamente 3...
temp->anterior=temp2;
temp->siguiente=temp2->siguiente;
// temp2->siguiente=temp->anterior;
temp2->siguiente=temp;
Gracias eferion ya me salio jaja ;D ;D ;D ;D :laugh: ;-)
tienes mucha razon aparte de que me faltaba declarar un nuevo nodo
esto fue lo que hice
temp->anterior=temp2;
temp3=temp2->siguiente;
temp->siguiente=temp2->siguiente;
temp2->siguiente=temp;
temp3->anterior=temp;
Saludos :)