/*
  Somma uno a tutti gli elementi di una lista.
*/

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


/* il tipo lista */

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

typedef struct NodoLista *TipoLista;


/*
  stampa di una lista di lunghezza generica
*/

void StampaLista(TipoLista l) {
  TipoLista s;

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

  printf("\n");
}


/*
  aggiunta di un elemento in testa alla lista
*/

void InserisciTestaLista(TipoLista *pl, int e) {
  TipoLista t;

  t=malloc(sizeof(struct NodoLista));
  t->val=e;
  t->next=*pl;

  *pl=t;
}


/*
  somma uno a tutti gli elementi della lista
*/

void SommaUno(TipoLista l) {
  TipoLista s;

  s=l;

  while(s!=NULL) {
    s->val=s->val+1;
    s=s->next;
  }
}


/*
  main
*/

int main() {
  FILE *fd;
  int res;
  int x;

  TipoLista l;


		/* apre il file */
  fd=fopen("lista.txt", "r");
  if (fd==NULL) {
    perror("Errore in apertura del file");
    exit(1);
  }


		/* inizializza la lista */
  l=NULL;


		/* legge fino alla fine del file */
  while(1) {
    res=fscanf(fd, "%d", &x);
    if( res!=1 )
      break;

    InserisciTestaLista(&l, x);
  }

  fclose(fd);


		/* stampa la lista */

  StampaLista(l);


		/* somma uno a tutti gli elementi */

  SommaUno(l);
  

                /* stampa la lista */

  StampaLista(l);

  return 0;
}
