#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
struct list
{
int field; // поле данных
list* next; // указатель на следующий элемент
list* prev; // указатель на предыдущий элемент
};
void pre(list* lst)
{
struct list* p;
p = lst;
do {
p = p->prev; // переход к предыдущему узлу
printf("%d ", p->field); // вывод значения элемента p
} while (p != lst); // условие окончания обхода
}
list* init(int a)//инициализация
{
struct list* lst;
lst = (struct list*)malloc(sizeof(struct list));
lst->field = a;
lst->next = lst; // указатель на следующий узел
lst->prev = lst; // указатель на предыдущий узел
return(lst);
}
list* push(list* lst, int number)
{
struct list* temp, * p;
temp = (struct list*)malloc(sizeof(list));
p = lst->next; // сохранение указателя на следующий узел
lst->next = temp; // предыдущий узел указывает на создаваемый
temp->field = number; // сохранение поля данных добавляемого узла
temp->next = p; // созданный узел указывает на следующий узел
temp->prev = lst; // созданный узел указывает на предыдущий узел
p->prev = temp;
return(temp);
}
list* pop(list* lst)
{
struct list* prev, * next;
prev = lst->prev; // узел, предшествующий lst
next = lst->next; // узел, следующий за lst
prev->next = lst->next; // переставляем указатель
next->prev = lst->prev; // переставляем указатель
free(lst); // освобождаем память удаляемого элемента
return(prev);
}
list* intersec(list* ken,list* ny, int a, int b)//принимает указатели на корни
//двух списков для пересечения
{
int n = 0;
for(int i=0;i<a;i++)
{
ken = ken->prev;
for(int i1=0;i<b;i++)
{
ny = ny->prev;
```
if ((ken->field) == (ny->field))
```
{
n = 1;
pop(ny);
break;
}
}
}
return 0;
}
int main()
{
list* a = NULL;
list* b = NULL;
int k,d,k1;
cout <<"Enter the elems number in first list:"<<endl;
cin >> k;
cout << "Enter elems:" << endl;
cin >> d;
a=init(d);
for (int i = 0; i < k-1; i++)
{
cin >> d;
push(a, d);
}
cout << "Enter the elems number in second list:" << endl;
cin >> k1;
cout << "Enter elems:" << endl;
cin >> d;
b=init(d);
for (int i = 0; i < k1-1; i++)
{
cin >> d;
push(b, d);
}
cout << "First list: "<<endl;
pre(a);
cout << endl;
cout << "Second list: " << endl;
pre(b);
intersec(a, b,k,k1);
cout << endl;
cout << "List's intersection: " << endl;
pre(a);
return 0;
}