Queremos intercambiar rosa con alberto. Debería asignar a rosa la dirección a la que apunta alberto. Esto sería: rosa^.sig := alberto^.sig y a alberto asignarle la dirección que tiene rosa ahora y alberto pasaría a ser la cabecera de la lista. Ok, no estoy seguro de cómo hacer esto.
rosa->alberto->luis->nil
Rescatando un poco este post y para dejar la solución al problema que planteaba para futuras consultas.Lo del "error while linking" y el "exitcode=216" al parecer lo provocaba el compilador (FreePascal), probé con TurboPascal y corre sin problemas.El procedimiento cambiar quedó definitivamente de la siguiente manera:Código: Text procedure Cambiar (var Lista : TipoListaEnlazada; var Mayor, Menor : PunteroLista); var Aux : PunteroLista;begin new(Aux); Aux^.Datos := Mayor^.Datos; Mayor^.Datos := Menor^.Datos; Menor^.Datos := Aux^.Datos;end; Lo que hice fué simplemente cambiar los datos contenidos en los punteros sin cambiar sus enlaces. No se si será medio chapucera esta forma, pero así funciona.Agradecería cualquier sugerencia, pero como digo, funciona.
Hola Amilus:He probado así como dices tú, incluso acabo de modificar el procedimiento para probar la forma que me indicas, pero la lista no se ordena.No entiendo cuando dices que dejo un montón de nodos huérfanos . Simplemente cambio la información de un nodo a otro, pero no toco la estructura de la lista. Si te refieres al Aux que queda siempre por ahí pues con un dispose lo arreglo, no?Bueno, tu me dices en que me estoy equivocando. Gracias.