Как было указано в комментариях, наличие нескольких возвратов в функции не обязательно является плохой формой. Все зависит от контекста. Например, функция long-ish может проверить несколько условий возврата сейчас перед выполнением кода функции.
Но я вижу увеличение читабельности, если в вашей функции есть один оператор return.
Вот мое скромное предложение:
t_nodo *intersezione_insieme(t_nodo *insieme_A, t_nodo* insieme_B)
{
t_nodo *temporaneoNodo;
if (insieme_A == NULL || insieme_B == NULL) {
temporaneoNodo = NULL;
}
else if (insieme_A->info < insieme_B->info) {
temporaneoNodo = intersezione_insieme(insieme_A->succ, insieme_B);
}
else if (insieme_A->info > insieme_B->info) {
temporaneoNodo = intersezione_insieme(insieme_A, insieme_B->succ);
}
else
{
temporaneoNodo = (t_nodo*)malloc(sizeof(t_nodo));
temporaneoNodo->info = insieme_A->info;
temporaneoNodo->succ = intersezione_insieme(insieme_A->succ, insieme_B->succ);
}
return temporaneoNodo;
}