Рекурсивная симметричная разница между двумя связанными списками - PullRequest
0 голосов
/ 10 мая 2019

Я хотел бы поделиться проблемой, с которой я борюсь.Мне нужно создать две рекурсивные функции (с хвостовой рекурсией, мне не разрешено помещать несколько возвращений внутри тела функции), и функции: Рассчитать пересечение между двумя наборами чисел.Вычислите симметричную разницу между двумя наборами чисел.

Я уже выполнил функцию, которая вычисляет пересечение, и я опубликую ее в разделе кода.Как я могу вычислить симметричную разницу в способе, которым я вычислил пересечение?Поскольку симметричная разность является противоположностью пересечения, и, возможно, я могу повторно использовать некоторый код, который я уже написал для функции симметричной разности.

Примечание: два набора чисел сохраняются в двух связанных списках, и ониуже отсортированы, и каждое число в наборе уникально, они не могут повторяться.

Вот функция пересечения (она хорошо работает во всех случаях):

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