Práctico 12 - Ejercicio 6 parte g

Práctico 12 - Ejercicio 6 parte g

de Alejandro Fandiã‘O Larrosa -
Número de respuestas: 3

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;




En respuesta a Alejandro Fandiã‘O Larrosa

Re: Práctico 12 - Ejercicio 6 parte g

de Alejandro Fandiã‘O Larrosa -
Me equivoqué en el título, mi duda es sobre la parte F.
En respuesta a Alejandro Fandiã‘O Larrosa

Re: Práctico 12 - Ejercicio 6 parte g

de Jonathan Murana -
Hola Alejandro,

para mi esta bien lo que estas haciendo.

La letra no dice nada de no afectar la lista l.