Sono sempre alle prese con degli esercizi sulle liste:)
Questa volta devo creare due liste fonderle e creare una terza lista.
Faccio un esempio:
lista1 B N S I O
lista2 E I S M !
lista3 B E N I S S I M O !
Pensavo finalmente di aver scritto del codice buono invece...
Perchè non riesco mai a risolvermi un esercizio da solo:cry:
Ecco la mia funzione di fusion
codice:
Function crea_lista3(pLista1,pLista2: puntatore):puntatore;
var
pLista3,pAus3: puntatore;
begin
pAus1:=pLista1;
pAus2:=pLista2;
if (pLista1=NIL) AND (pLista2=NIL) then pLista3:=NIL
else begin
//Creazione del primo elemento
new(pLista3);
pLista3^.inf:=pLista1^.inf;
pAus3:=pLista3;
//Creazione del secondo elemento
new(pAus3^.pun);
pAus3:=pAus3^.pun;
pAus3^.inf:=pLista2^.inf;
while (pAus1<>NIL) AND (pAus2<>NIL) do begin
//Creazione degli elementi successivi
new(pAus3^.pun);
pAus3:=pAus3^.pun;
pAus1:=pAus1^.pun;
pAus3^.inf:=pAus1^.inf;
new(pAus3^.pun);
pAus3:=pAus3^.pun;
pAus2:=pAus2^.pun;
pAus3^.inf:=pAus2^.inf;
end;
paus3^.pun:=NIL; //Marca di fine lista
end;
crea_lista3:=pLista3;
end;
Commento quello che penso di aver scritto...
Alla funzione crea_lista3 passo i puntatori alla testa della lista1 e lista2.
pLista1,pLista2,pAus1,pAus2 le dichiaro variabili globali perchè ovviamente le devo usare in crea_lista3.
Inizializzo:
pAus1:=pLista1;
pAus2:=pLista2;
Poi mi faccio un controllo sulle due liste per vedere se non sono vuote,poi passo alla creazione del primo elemento (a cui passo pLista1), nel mio esempio è la B.
Poi creo il secondo elemento passando new(pAus3^.pun) (a cui passo pLista2), nel mio esempio è la E.
Proseguo alla creazione degli altri elementi servendomi del ciclo while che si blocca appena una delle 2 liste si conclude........
Ho controllato più volte il codice passo-passo, perchè non riesco ad auto-debuggare da solo?
Mi scoccia chiedere aiuto sempre ad Alka
:quipy:, visto che ci siamo ormai helpatemi!!!
:)