Liste

#include <iostream>
#include <cstdlib>

using namespace std;

struct Nodo
{
  int val;
  Nodo *suc;
};

//------------------------------------------------------------------------------

void crea_lista(Nodo **nodoPtr, int n) // funzione senza return
{
  static int i=0; // opzionale per la stampa di supporto
  
  if (n==0)
  {
    (*nodoPtr) = NULL;
  }
  else
  {
    (*nodoPtr) = new Nodo;
    cout<<"Nodo "<<++i<<" valore: "; // opzionale per la stampa di supporto
    cin>>(*nodoPtr)->val;
    crea_lista(&((*nodoPtr)->suc),n-1);
  }
}

//------------------------------------------------------------------------------

Nodo *nuova_lista(int n) // funzione di creazione lista con return
{
  static int i=0; // opzionale per la stampa di supporto
  
  if (n==0)
  {
    return NULL;
  }
  else
  {
    Nodo *nodo = new Nodo;
    cout<<"Nodo "<<++i<<" valore: "; // opzionale per la stampa di supporto
    cin>>nodo->val;
    nodo->suc = nuova_lista(n-1);
  }
}

//------------------------------------------------------------------------------

void stampa_lista(Nodo *nodo)
{
  if (nodo!=NULL)
  {
    cout<<nodo->val<<" ";
    stampa_lista(nodo->suc);
  }
}

//------------------------------------------------------------------------------

int lunghezza_lista(Nodo *nodo)
{
  if (nodo==NULL)
  {
    return 0;
  }
  else
  {
    return 1 + lunghezza_lista(nodo->suc);
  }
}

//------------------------------------------------------------------------------

long somma_lista(Nodo *nodo)
{
  if (nodo==NULL)
  {
    return 0;
  }
  else
  {
    return nodo->val + somma_lista(nodo->suc);
  }
}

//------------------------------------------------------------------------------

int main()
{
  int n;
  Nodo *miaLista;
  
  cout<<"NUMERO ELEMENTI DA INSERIRE NELLA LISTA: ";
  cin>>n;
  crea_lista(&miaLista,n); // alternativa con return "miaLista=nuova_lista(n);
  //stampa_lista(miaLista);
  cout<<"ELEMENTI INSERITI: "<<lunghezza_lista(miaLista)<<"\tTOTALE VALORI: "<<somma_lista(miaLista);
  
  return 0;
}