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

#include "TRA.h"
#include <stdio.h>

void purge (LIST L) {
	LIST_POSITION p, q, r;
	p = LIST_FIRST(L);
	while (p != LIST_EOL(L)) {
		q = LIST_NEXT(L, p);
		while (q != LIST_EOL(L)) {
			if (LIST_SAME(L, LIST_RETRIEVE(L, p),
				LIST_RETRIEVE(L, q))) {
					r = q;
					q = LIST_NEXT(L, q);
					LIST_DELETE(L, r);
			}
			else q = LIST_NEXT(L, q);
		}
		p = LIST_NEXT(L, p);
	}
}

void main() {
	LIST L;
	INT_LIST_CREATE(L);
	LIST_CONSTRUCT_RANDOM(L, 20, 1, 10);
	LIST_PRINT(L);
	putchar('\n');
	purge(L);
	LIST_PRINT(L);
	putchar('\n');
}