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 ).
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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;