ecco già ci siamo quasi apparte qualche piccolo errore, ovvero:
codice:
int main()
{
    int n, i, occ=0;
    nodo *testa[MAX];

    for(i=0; i<MAX; i++) testa[i]=NULL;

    printf("Inserire il numero del quale si stanno ricercando le occorrenze: ");
    scanf("%d", &n);

    for(i=0; i<MAX; i++)
    {
        if ( testa[i] != NULL ) occ += CercaOccorrenze(testa[i], n);
    }

    printf("Il numero %d possiede %d occorrenze.\n", n, occ);

    system("pause");
    return 0;
}
il for che ho inserito serve per mettere inizialmente a NULL tutti i puntatori...altrimenti se vai a cercare e la lista è vuota ti va in crash, e poi quando vai a fare la ricerca, fai un test prima su testa[i] per vedere se il puntatore non è NULL, e poi passi alla funzione testa[i], non testa[MAX]!
Inoltre devi mettere "+=" ovvero:
codice:
occ = CercaOccorrenze(testa[i], n) + occ;
perchè deve sommare le occorrenze in occ, altrimenti va a contre le occorrenze in ogni singola lista! non so se mi sono spiegato!

Infine la funzione ricerca io la farei come l'hai fatta tu ma sl cn una piccola modifica:
codice:
int CercaOccorrenze(nodo *cursore, int num)
{
    nodo *temp;
    int trovato = 0;

    temp = cursore;

    while(temp != NULL)
    {
        if(temp->valore == num)
        {
            trovato++;
        }
        temp = temp->next;
    }

    return trovato;
}