Я пытался написать рекурсивную функцию объединения, имеющую 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
Пересечение: