C语言 如何从该函数中删除多个返回

kuhbmx9i  于 2023-03-29  发布在  其他
关注(0)|答案(1)|浏览(93)

我已经写了一个函数来计算两个排序链表的交集(以递归的方式),但是我需要删除if语句中的那些“return”,并重新调整代码。有什么建议吗?提前感谢

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; 
}
svmlkihl

svmlkihl1#

就像在注解中概述的那样,在函数中有多个返回值并不一定是不好的形式。这完全取决于上下文。例如,一个长函数可能会在执行函数代码之前检查一些“立即返回”条件。
但是我可以看到,在你的函数中使用一个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; 
}

相关问题