Jump to content

Recommended Posts

cambie el código, el anterior no ordenaba nada ese era el problema, pero creo que este debería funcionar... aunque no xD

 

void Lista::Ordenar ( )
{ Nodo *pNodo, *pAux, *pNuevo;

  pNodo=this->head;
  pAux=pNodo->GetNext();

  while(pNodo)
  {
      while(strcmp(pNodo->GetValue( ), pAux->GetValue( ))<0)
      {
          pNodo=pNodo->GetNext();
          pAux=pAux->GetNext();
      }
        pNuevo=pNodo->GetPrev();
        pNuevo->SetNext(pAux);
        pNodo->SetNext(pAux->GetNext());
        pAux->SetNext(pNodo);
        if(pNodo->GetNext())
        {
            pNodo=this->head;
            pAux=pNodo->GetNext();
        }
  }
}

 

get prev -> retorna el nodo anterior

get next -> retorna el nodo siguiente

Edited by Fervax
Link to comment
Share on other sites

  • 2 weeks later...

gracias por responder, perdon por verlo tan tarde es que ya entregue la tarea hace un tiempo xD.

 

while(pNodo) eso significa "mientras pNodo no apunte a nulo"

y while(!pNodo) significa "mientras pNodo apunte a nulo"

 

 

Saludos.

Link to comment
Share on other sites

pNodo=this->head;

pAux=pNodo->GetNext();

 

eso podría tener un error, qué pasa si this->head es null?

getNext() debería devolver null, pero no sé como lo implementaste.

 

Hay muchas cosas que no entiendo en tu código, debiste haberlo comentado más, la primera duda que me surge es qué estás ordenando, porque strcmp es para comparar cadenas de carácteres.... entonces cuáles son tus criterios de ordenamiento??

 

 

este código podría estar malo:

 

while(strcmp(pNodo->GetValue( ), pAux->GetValue( ))<0)

{

pNodo=pNodo->GetNext();

pAux=pAux->GetNext();

}

 

porque no evalúa si pNodo existe, por lo que debería entrar en un buble infinito y en algún momento se caería o tiraría error de memoria.

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...