Clonage d'une liste simplement chaînée
Bonjour à tous,
mon problème est le suivant, je dois réaliser une routine qui clone une liste simplement chaînée. Seulement, je ne vois pas très bien comment la réaliser.
Je vois bien pour 2 éléments mais après, je bloque ( et même avec des petits dessins :P).
Comme vous pouvez le voir, le éléments clonés à partir du 3e, seront mis avant le 2e... je vois pas du tout comment procéder pour les mettre dans le même ordre que dans la liste originelle.
Merci de me lire.
Voici donc les parties de l'unité que j'ai crée.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| procedure NouvelleListe(var l:Liste);
begin
l:=nil;
end;
(* ------------------------------------------- *)
function ListeVide(l:Liste):boolean;
begin
result:=l=nil;
end;
(* ------------------------------------------- *)
function DansListe(e:ElemListe;l:Liste):boolean;
var temp:Liste;
begin
temp:=l;
while (temp<>nil) and not ElemlisteEgal(temp^.info,e) do
begin
temp:=temp^.svt;
end;
result:=temp<>nil;
end;
(* ------------------------------------------- *)
function InsererListe(E:ElemListe;var L:Liste):boolean;
var nouveau:liste;
begin
if (not DansListe(E,L)) then
begin
new(nouveau);
nouveau^.info:=E;
nouveau^.svt:=L;
L:=nouveau;
result:=true;
end
else
result:=false;
end;
(* ------------------------------------------- *)
procedure InsererModifierListe(E:ElemListe;var l:Liste);
var nouveau:liste;
begin
nouveau:=l;
while (nouveau<>nil) and not ElemlisteEgal(nouveau^.info,e) do
begin
nouveau:=nouveau^.svt;
end;
if nouveau=nil then
begin
new(nouveau);
nouveau^.info:=E;
nouveau^.svt:=l;
l:=nouveau;
end
else
nouveau^.info:=E;
end;
(* ------------------------------------------- *)
procedure Afficherliste(L:liste);
var temp:liste;
begin
temp:=L;
while (temp<>nil) do
begin
write(temp^.info,' ');
temp:=temp^.svt;
end;
end;
(* ------------------------------------------- *)
procedure ClonerListe(var dest:Liste;source:Liste);
var svtsource,nouveaudest:Liste;
begin
if source=nil then
dest:=nil
else
begin
new(dest);
CopyElemListe(dest^.info,source^.info);
dest^.svt:=nil;
svtsource:=source^.svt;
while (svtsource<>nil) do
begin
new(nouveaudest);
CopyElemListe(nouveaudest^.info,source^.info);
nouveaudest^.svt:=dest^.svt;
dest^.svt:=nouveaudest;
svtsource:=source^.svt
end;
nouveaudest^.svt:=nil;
end;
end; |