/*
  Esercizio di esame del 26-6-2000
*/

#include<stdlib.h>
#include<stdio.h>

/* definizione lista */

struct NodoLista {
  int val;
  struct NodoLista *next;
};
typedef struct NodoLista *TipoLista;


/*
  lettura lista da file, in ordine
*/

TipoLista LeggiLista(char *nomefile) {
  FILE *fd;
  int res, x;
  TipoLista l, s;


		/* apre il file */
  fd=fopen(nomefile, "r");
  if(fd==NULL) {
    printf("Errore in apertura del file che contiene la lista\n");
    exit(1);
  }

		/* legge la lista */
  l=NULL;
  while(1) {
			/* prova a leggere un elemento */
    res=fscanf(fd, "%d", &x);
    if(res!=1)
      break;

  			/* se ci riesce, lo aggiunge in coda */
    if(l==NULL) {
      l=malloc(sizeof(struct NodoLista));
      s=l;
    }
    else {
      s->next=malloc(sizeof(struct NodoLista));
      s=s->next;
    }

    s->val=x;
    s->next=NULL;
  }


		/* chiude il file */
  fclose(fd);

  return l;
}


/*
  stampa gli elementi di una lista
*/

void StampaLista(TipoLista l) {
  while(l!=NULL) {
    printf("%d ", l->val);
    l=l->next;
  }
}


/* inserire qui la soluzione */


/*
  main
*/

int main(int argn, char *argv[]) {
  TipoLista l;

  if(argn-1!=1) {
    printf("Numero di argomenti errato: dare il nome del file\n");
    exit(1);
  }

  l=LeggiLista(argv[1]);

  printf("Lista, prima della eliminazione dei pari\n");
  StampaLista(l);
  printf("\n");

  Accorpa(&l);

  printf("Lista, dopo della eliminazione dei pari\n");
  StampaLista(l);
  printf("\n");


  return 0;
}
