Lista con fusione

Considerate il programma riportato in coda, che contiene alcune funzioni per la manipolazione di liste di interi.

Modificate il programma scrivendo una funzione merge con prototipo

element *merge( element*h1, element *h2 )

che costruisca una lista alternando gli elementi di l1 e l2 e restituisca l'indirizzo del primo elemento della nuova lista.

Potete assumere che l1 e l2 siano della stessa lunghezza. Non è necessario che la funzione merge preservi le due liste originarie l1e l2.

Scrivete quindi la funzione main in modo che il programma:

Esempio

Eseguendo

./soluzione

avendo nel flusso di ingresso le righe:

7 5 3 1 0
8 6 4 2 0

il programma emette sul flusso di uscita:

1 2 3 4 5 6 7 8

Si noti che l'ordine di stampa finale è invertito rispetto all'input poiché l'inserimento avviene in testa.

Esempio

Eseguendo

./soluzione

avendo nel flusso di ingresso le righe:

14 2 -7 10 4 3 0
1 2 3 4 5 6 0

il programma emette sul flusso di uscita:

3 6 4 5 10 4 -7 3 2 2 14 1

Programma da completare

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

struct element {
  int info;
  struct element *next;
};

typedef struct element element;

element *insert(int n, element *h);
void printList(element *h);
element *merge(element*h1, element *h2);

/******** SI DEFINISCA OPPORTUNAMENTE LA FUNZIONE MAIN ********/
int main(){
	....
}

/*  Inserisce un nuovo elemento contenente n in testa alla lista  h
    Restituisce la lista ottenuta. */
element *insert(int n, element *h){
  element *new = malloc(sizeof(element));
  new->info = n;
  new->next = h;
  return new;
}


/* Stampa gli elementi della lista   h */
void printList(element *h){
  /* h e' usato  per attraversare la  lista */
  for( ; h!= NULL; h=h->next)
    printf("%d ", h->info);
  putchar('\n');
}



/* Fonde due liste alternando gli elementi.
Restituisce l'indirizzo della lista ottenuta */

/******** SI DEFINISCA OPPORTUNAMENTE LA FUNZIONE MERGE ********/
element *merge(element*h1, element *h2){
  ...
}
/*****************************************************/