我已经编写了一个函数来计算两个排序的链表的交集(以递归的方式),但是我需要删除if语句中的那些“返回”,并在没有它们的情况下重新适应代码。有什么建议么?预先感谢
t_nodo *intersezione_insieme(t_nodo *insieme_A, t_nodo* insieme_B)
{
t_nodo *tmp;
if (insieme_A == NULL || insieme_B == NULL) {
tmp = NULL;
}
else if (insieme_A->info < insieme_B->info) {
return intersezione_insieme(insieme_A->succ, insieme_B);
}
else if (insieme_A->info > insieme_B->info) {
return intersezione_insieme(insieme_A, insieme_B->succ);
}
else
{
tmp = (t_nodo*)malloc(sizeof(t_nodo));
tmp->info = insieme_A->info;
tmp->succ = intersezione_insieme(insieme_A->succ, insieme_B->succ);
}
return tmp;
}
答案 0 :(得分:1)
就像注释中概述的那样,一个函数中有多个返回不一定是错误的形式。这完全取决于上下文。例如,长期执行的函数可能会在执行该函数的代码之前检查一些“立即返回”条件。
但是我可以看到,通过在函数中使用单个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;
}