(*  Tietorakenteet ja algoritmit 1999 *)
(*    Esimerkki 2-5 : Alkion useampien esiintymien poistaminen listasta *)
(*    9.9.1999 MM	*)

program Esim2_5;

import TRA;

procedure purge (L:LIST); 
var p,q,r:LIST_POSITION;
begin
	p := LIST_FIRST(L);
	while (p<>LIST_EOL(L)) do
		begin
		 q:=LIST_NEXT(L, p);
		 while (q<>LIST_EOL(L)) do
			begin
			if (LIST_SAME(L, LIST_RETRIEVE(L, p),
				LIST_RETRIEVE(L, q))) then 
					begin
					r := q;
					q := LIST_NEXT(L, q);
					LIST_DELETE(L, r);
					end
			else q:=LIST_NEXT(L, q);
		end;
		p := LIST_NEXT(L, p);
	end;
end;

var L:LIST;
begin
	INT_LIST_CREATE(L);
	LIST_CONSTRUCT_RANDOM(L, 20, 1, 10);
	LIST_PRINT(L);
	writeln;
	purge(L);
	LIST_PRINT(L);
	writeln;
end.
