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->nilSupongo que ser'ia como intercambiar variables>
Rescatando un poco este post y para dejar la solución al problema que planteaba para futuras consultas.Pues estas dejando muchos nodos huerfanos de padre y madre... :lol:
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:Si, efectivamente me referia al Aux. Si Datos es un registro y no un puntero no hay problema, pero no es eficiente por que mueves toda la memoria del registro en lugar de sólo modificar los punteros. (De todas formas un codigo que funciona es mejor que uno que no funciona aunque en teoria si funcionara fuera mas eficiente :P ) Si Datos es un puntero el new() esta demás por que sólo necesitas intercambiar las posiciones de memoria que contienen.
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.