Hola, en este ejercicio que se pide partir una lista en 2, sin generar nuevas celdas, no puedo conceptualizarmelo sin cortar la lista original, ya que no puedo crear una copia limpia a parte.
Comparto abajo el procedimiento que me pensé, que hace lo que se pide, solo que a la lista original "l" la termino afectando, y en escencia, me queda que l = l1 cortadas ambas en k, y l2 con el resto de los elementos.
¿Existe alguna manera de esquivar esto sin crear una copia limpia?
{parte F}
procedure partir(k : Positivo; l : ListaInt; var l1, l2 : Listaint);
var
p : ListaInt;
pos : integer;
begin
{reviso que l no sea vacia}
if l = nil then
begin
l1:= nil;
l2:= nil
end else
begin
pos:= 1;
l1:= l;
p:= l1;
{muevo el puntero p hasta la posicion k
(o el final de l, lo que pase antes)}
while (p^.sig <> nil) and (pos < k) do
begin
pos:= pos+1;
p:= p^.sig
end;
{Discrimino si tengo que cortar la lista o asignar nil a l2}
if pos = k then
begin
l2:= p^.sig;
p^.sig:= nil{!!! mi problema. Con esto corto la lista l tambien}
end else
l2:= nil
end
end;