Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- struct NOT; //элемент списка
- struct LIST; //список
- struct NOT {
- int num;
- NOT* next;
- LIST* sublist;
- };
- struct LIST {
- NOT* begin;
- LIST() : begin(nullptr) {}
- };
- //добавление числа в список
- void addNOT(LIST*& l, int num)
- {
- NOT* n = new NOT;
- n->sublist = nullptr;
- n->num = num;
- n->next = nullptr;
- if (!l->begin)
- {
- l->begin = n;
- return;
- }
- auto temp = l->begin;
- while (temp->next) temp = temp->next;
- temp->next = n;
- }
- void addNOTtoHead(LIST*& l, NOT* ptr)
- {
- if (!l->begin)
- {
- l->begin = ptr;
- return;
- }
- auto t = l->begin;
- ptr->next = t;
- l->begin = ptr;
- }
- //добавление списка последнему элементу списка
- void addSublist(LIST*& l, LIST* subL)
- {
- auto temp = l->begin;
- while (temp->next) temp = temp->next;
- temp->sublist = subL;
- }
- //добавление списка первому элементу списка
- void addSublistToHead(LIST*& l, LIST* subL)
- {
- l->begin->sublist = subL;
- }
- //вывод списка с подсписками
- void print(LIST* l, bool isSubl = false)
- {
- auto temp = l->begin;
- while (temp)
- {
- cout << " n " << temp->num;
- if (temp->sublist) //если есть подсписок, заходим в рекурсию
- {
- cout << "-> { ";
- print(temp->sublist, true);
- }
- else
- {
- cout << " ";
- }
- temp = temp->next;
- }
- if (isSubl) cout << "} ";
- }
- //поворот
- void reverse(LIST*& l)
- {
- LIST* tList = new LIST;
- auto temp = l->begin;
- while (temp)
- {
- NOT* tN = new NOT;
- tN->next = nullptr;
- tN->num = temp->num;
- tN->sublist = nullptr;
- addNOTtoHead(tList, tN);
- if (temp->sublist)
- {
- reverse(temp->sublist);
- addSublistToHead(tList, temp->sublist);
- }
- temp = temp->next;
- }
- l = tList;
- }
- int main()
- {
- setlocale(0, "rus");
- //создаём список
- LIST* list = new LIST;
- addNOT(list, 4);
- addNOT(list, 5);
- addNOT(list, 6);
- //создаём подсписок
- LIST* sublist = new LIST;
- addNOT(sublist, 5);
- addNOT(sublist, 3);
- addNOT(sublist, 8);
- addNOT(sublist, 9);
- //создаём подсписок для подсписка
- LIST* sublist1 = new LIST;
- addNOT(sublist1, 9);
- addNOT(sublist1, 1);
- //теперь включаем подсписок для подсписка
- addSublist(sublist, sublist1);
- //теперь включаем подсписок для списка
- addSublist(list, sublist);
- //выводим
- print(list);
- cout << endl;
- //поворачиваем
- reverse(list);
- //выводим
- print(list);
- system("pause");
- }
Add Comment
Please, Sign In to add comment