两个链表之间的递归对称差异

时间:2019-05-10 16:27:46

标签: c recursion return ansi tail

我想分享一个我正在努力解决的问题。 我需要创建两个递归函数(使用尾递归,不允许在函数体内放入多个返回值),这些函数是: 计算两组数字之间的交点。 计算两组数字之间的对称差。

我已经完成了计算交点的功能,并将其发布在代码部分中。如何计算交点的对称差?因为对称差与交集相反,所以也许我可以重用已经为对称差函数编写的一些代码。

注意:两组数字保存在两个链接列表中,并且已经进行了排序,并且一组中的每个数字都是唯一的,不能重复。

这是相交的功能(在所有情况下都适用):

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
    {
        while (insieme_A->info < insieme_B->info && insieme_A->succ != NULL) {
            insieme_A = insieme_A->succ;
        }
        while (insieme_A->info > insieme_B->info && insieme_B->succ != NULL) {
        insieme_B = insieme_B->succ;
        }

        tmp = (t_nodo*)malloc(sizeof(t_nodo));

        if (insieme_A->info == insieme_B->info) {
            tmp->info = insieme_A->info;   
            tmp->succ = intersezione_insieme(insieme_A->succ, insieme_B->succ);
        }
        else
        {
            tmp = intersezione_insieme(insieme_A->succ, insieme_B->succ);
        }
    }
    return tmp; 
} 

0 个答案:

没有答案