ciao ragazzi ho bisogno del vs aiuto!
ho questo esercizio sotto mano

"Progettare una applicazione c che gestisca una matrice di interi M ed una lista di interi L . M è una matrice quadrata n x n con n scelto in maniera dinamica (ad es: inserito dall’utente in fase di esecuzione). Implementare le strutture dati e le seguenti fuzioni:
Serializza: data la matrice M di dimensione nxn restituisce una lista contenente n2 elementi. Gli elementi nella lista sono gli elementi di M ordinati per righe a partire dalla prima riga fino all’ultima.
Deserializza: Data una lista L contenente n2 interi, restituisce una matrice nxn che contiene gli elementi di L organizzati per file di lunghezza n. Nota: utilizzare sempre l’allocazione dinamica per le matrici.
Main: nella funzione main l’utente specifica la dimensione n della matrice e riempie la matrice M di valori interi. L’applicazione serializza la matrice, stampa a video la lista serializzata, somma il valore 5 ad ogni elementro della lista, deserializza la lista e termina visualizzando la matrice che contiene gli elementi deserializzati della lista."

io l horisolto non utilizzando una struttura dati di tipo lista, poichè ho serie difficoltà nel capire come si ragiona e si procede utilizzando una lista, potreste indicarmi come fare? mi basterebbe anche che mi spiegate il procedimento da eseguire. al resto "come sempre" ci penso sempre io :-)
questo è il codice che ho battuto ma che non è corretto.

codice:
#include <stdio.h>
#include <stdlib.h>
typedef struct nodo *lista;
typedef struct nodo {
int val;
lista next;

 int deserializza (int n,int **mat,int L[]){

 int i, j;
 int x=0;

 for (i=0;i<n;i++)
 for (j=0;j<n;j++)
 {

 {  mat[i][j]=L[x];

 }x++;}}


int serializza (int n,int**mat,int L[])
{int i, j;
int x=0;

{for(i = 0; i < n; i++){
    for(j = 0; j < n; j++){
L[x]=mat [i][j];
  x++;}  }}}

main()
{
    int n,**mat,i,j,x;

     printf(" dimensione di n della matrice ?  ");
    scanf("%d",&n);
    x=n*n;
    int L[x];
        mat = (int**) malloc (n *sizeof (int*)); /*allocamento*/
    for (i=0; i<n ; i++)
    {    mat[i]= (int*)malloc (n* sizeof (int));}
printf("Lettura matrice %dX%d elemento ;\n", n, n);
  for(i = 0; i < n; i++){
    for(j = 0; j < n; j++){

      scanf("%d",& mat[i][j]);}
}
      serializza (n,mat,L);
      for(i = 0; i < x; i++){
          L[i]+=5;
        printf("%d",L[i]);
        printf("\t");}

 deserializza (n,mat,L);
 printf("\n");
  printf("\n");
  for(i = 0; i < n; i++){
    for(j = 0; j < n; j++){
     printf("%3d", mat[i][j]);
  }printf("\n");}



  for (i=0; i< n ; i++)
       free (mat[i]);
    free (mat);


}