[ Foro de Pascal ]

Ordenar lista encadenada simple

15-Nov-2015 16:18
Invitado (Nicolás)
1 Respuestas

Hola a todos, Alguien sabe si existe alguna forma sencilla de volver al inicio de una lista encadenada simple? Tengo que ordenar una por el método de burbujas pero mi código solo ordena un ciclo, es decir llega hasta el final, ordena lo que puede ahi y termina, no repite ciclos para volver a ordenar. Por ejemplo, Si en la lista hay 1 3 2 0 me devuelve 1 2 0 3 y no 0 1 2 3 que sería lo normal.
Yo tengo tres punteros: Inicio, actual y siguiente
Inicio está siempre apuntando al comienzo de la lista y no se modifica, actual y siguiente se encargan de ir comparando los nodos dos a dos e intercambiarse si se cumple la condición.
Tengo armado un while que se encarga de recorrer la lista y cada vez que debe intercambiar un nodo, suma uno a una variable contador, cuando termina el ciclo ese contador se guarda en un auxiliar, el contador vuelve a 0 para verificar cambios en el proximo ciclo y se repite (en teoría) el proceso, el ciclo while se rompe cuando el auxiliar es 0 (porque el contador de intercambios es 0 y al final del ciclo se pasa al auxilar)
yo lo que hago es, cuando llega al final de la lista, apuntar Actual y siguiente a Inicio así:
Actual := Inicio;
Siguiente : Inicio;
pero no hace nada, como dije llega al final ordenando lo que puede y no hace mas nada. Alguna ayuda para volver al inicio de la lista?

Saludos.


16-Nov-2015 01:22
Nacho Cabanes (+83)

La primera forma sencilla es conservar siempre una referencia a la cabeza de la lista, y utilizar una segunda variable para avanzar por ella, de modo que siempre se pueda volver al principio.

Pero eso no es eficiente. En el "mundo real", una lista no se suele ordenar mediante burbuja, que es un método basado en el acceso directo y, por tanto, indicado para arrays. En lugar de eso, cada nuevo dato se inserta en la posición adecuada para que quede ordenador automáticamente.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)