Объединение и пересечение двух связанных списков рекурсивно в C без дубликатов - PullRequest
0 голосов
/ 30 марта 2020

Я пытался написать рекурсивную функцию объединения, имеющую 2 полных списка, но я не могу опустить дубликаты элементов, даже если я проверю их, плюс функция пересечения возвращает мне пустую структуру. Я думаю, что определенно есть ошибка в isPresent (), но я не могу ее обнаружить.

struct list* unione ( struct list* l1, struct list* l2){

    struct list* h1 = l1;
    struct list * h2 = l2;
    struct list* l3 = NULL;
    struct list* tmp = NULL;


    if (h1 != NULL) {
            l3 = push(l3, h1->key);
             l3->next = unione(h1->next, h2);
        }
        tmp = l3;
        if (h2 != NULL){
            int val = h2->key;
            if (!isPresent(tmp, val))
            l3 = unione (h1, h2->next);
            l3 = push (l3, h2->key);
            l3->next = unione (h1, h2->next);


        }

        return l3;
}

список структур * interse c (список структур * l1, список структур * l2) {

struct list* h1 = l1;
struct list* l3 = NULL;
struct list* h2 = l2;

if (h1 != NULL){
    if (isPresent(l2, h1->key))
        push (l3, h1->key);
    l3 = intersec (h1->next, h2);
}
return l3;

}

bool isPresent (struct list *head, int elem){
    struct list *tmp = head;
    while (tmp != NULL)
    {
        if (tmp->key == elem)
            return 1;
        tmp  = tmp->next;
    }
    return 0;
}

Вывод: ( список 2 "11" не должен быть там) Список 1: 0-> 11-> 4-> 12-> 13-> 3 Список 2: 99-> 11-> 27 Список 3: 99 -> 11 -> 27-> 0-> 11-> 4-> 12-> 13-> 3

Пересечение:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...