Как как найти элементы, которые совпадают в двух списках и занести в третий?
Я написал код с тремя списками в одной структуре. Смог понять как занести два списка в один.
Не могу понять, как найти элементы, которые совпадают в двух списках и занести в третий. И к примеру, если в одном списке элемент есть, а в другом нет.
Вот код:
#include<iostream>
#include<ctime>
using namespace std;
struct List {
int inf;
List* next;
};
void Init(List** Head, List*& Tail) {
*Head = NULL;
Tail = NULL;
}
void AddElem(List*& Head);
void Druk(List* Head);
List* Find(List* Head, int elem);
int main() {
srand(time(NULL));
List* Res = NULL;
List* Head1, * Tail, *Head2;
List* List2 = new List;
Init(&Head1, Tail);
Init(&Head2, Tail);
int list1, list2;
cout << "Enter size of Q: ";
cin>> list1;
for (int i = 1; i <= list1; i++) {
AddElem(Head1);
}
Druk(Head1);
putchar('\n');
cout << "Enter size of G: ";
cin >> list2;
for (int i = 1; i <= list2; i++) {
AddElem(Head2);
}
Druk(Head2);
List*q = Head2;
while (q) {
List* NewNode = new List;
NewNode->inf = q->inf;
NewNode->next = NULL;
if (!Res) Res = NewNode;
else
{
List* p = Res;
while (p->next) p = p->next;
p->next = NewNode;
}
q = q->next;
}
q = Head1;
while (q) {
List* NewNode = new List;
NewNode->inf = q->inf;
NewNode->next = NULL;
if (!Res) Res = NewNode;
else
{
List* p = Res;
while (p->next) p = p->next;
p->next = NewNode;
}
q = q->next;
}
cout << endl;
Druk(Res);
cout << endl;
return 0;
}
void AddElem(List*& Head) {
List* NewNode = new List;
NewNode->inf = rand() % 10;
if (!Head)NewNode->next = NULL;
else NewNode->next = Head;
Head = NewNode;
}
void Druk(List* Head) {
List* q = Head;
if (!Head) cout << "List is empty";
while (q != NULL) {
cout << q->inf << "\t";
q = q->next;
}
cout << endl;
}
List* Find(List* Head, int elem)
{
List* q = Head;
while (q && (q->inf != elem))
q = q->next;
return q;
}