/* Esimerkki 3.
   14.5.1999 Matti Meriläinen

   Uuden samantyyppisen listan luominen tietämättä saatavan listan
   tyyppiä, listasta elementin hakeminen ja listan läpikäyminen.
   Ohjelma luo kokonaislukulistan L jossa on 10 alkiota, ja kopioi sen
   alkiot listaan M. Kopioinnin hoitaa aliohjelma Kopio, joka saa
   parametrinaan listan L ja palauttaa uuden listan, joka on kopio
   L:stä. Toimii yksinkertaisilla tyypeillä.
*/

#include "TRA.h"

LIST Kopio (LIST L) {
   LIST M;
   LIST_POSITION p;
   LIST_CREATE(M, LIST_TYPE(L));
   p = LIST_FIRST(L);
   while (p) {
      LIST_INSERT(M, LIST_EOL(M), LIST_RETRIEVE(L, p));
      p = LIST_NEXT(L, p);
   }
   return M;
}

int main() {
   LIST L, M;
   IL_CREATE(L);
   LIST_CONSTRUCT_RANDOM(L, 10, 1, 10);
   M = Kopio(L);
   LIST_PRINT(L);
   putchar('\n');
   LIST_PRINT(M);
}
