Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- struct DList {
- DList *next;
- int val;
- DList *prev;
- DList *appendL(int val);
- void view();
- };
- DList *DList::appendL(int _val) {
- DList *newList = new DList;
- newList -> next = nullptr;
- newList -> val = _val;
- newList -> prev = this;
- this -> next = newList;
- return newList;
- }
- void DList::view() {
- for (DList *currPtr = this; currPtr != nullptr; currPtr = currPtr -> prev) {
- cout << currPtr -> val;
- }
- cout << endl;
- }
- int main() {
- // Вводим список
- DList *dl = new DList;
- dl -> prev = nullptr;
- dl -> val = 0;
- dl -> next = nullptr;
- int x = 0;
- while (cin >> x) {
- dl = dl -> appendL(x);
- }
- dl -> view();
- // Минимум и максимум
- int min = dl -> val, max = dl -> val;
- DList *minPtr = nullptr, *maxPtr = nullptr;
- for (DList *currPtr = dl; currPtr != nullptr; currPtr = currPtr -> prev) {
- if (currPtr -> val < min) {
- min = currPtr -> val; minPtr = currPtr;
- }
- if (currPtr -> val > max) {
- max = currPtr -> val; maxPtr = currPtr -> next;
- }
- }
- vector<int> v;
- if (dl - maxPtr > dl - minPtr) {
- for (DList *currPtr = maxPtr; currPtr != minPtr; currPtr = currPtr -> next) {
- v.push_back(currPtr -> val);
- }
- for (int e : v) {
- cout << e << endl;
- }
- DList *changed_dl_start = new DList;
- changed_dl_start -> next = nullptr;
- changed_dl_start -> val = 0;
- changed_dl_start -> prev = nullptr;
- changed_dl_start = changed_dl_start -> appendL(v[0]);
- DList *changed_dl_end = changed_dl_start;
- for (size_t i = 1; i < v.size(); ++i) {
- changed_dl_start = changed_dl_start -> appendL(v[i]);
- }
- // Кольцуем
- changed_dl_start -> next = changed_dl_end;
- changed_dl_end -> prev = changed_dl_start;
- changed_dl_start -> view();
- } else {
- for (DList *currPtr = minPtr -> next; currPtr != maxPtr; currPtr = currPtr -> next) {
- v.push_back(currPtr -> val);
- }
- for (int e : v) {
- cout << e << endl;
- }
- DList *changed_dl_start = new DList;
- changed_dl_start -> prev = nullptr;
- changed_dl_start -> val = 0;
- changed_dl_start -> next = nullptr;
- changed_dl_start = changed_dl_start -> appendL(v[0]);
- DList *changed_dl_end = changed_dl_start;
- for (size_t i = 1; i < v.size(); ++i) {
- changed_dl_start = changed_dl_start -> appendL(v[i]);
- }
- // Кольцуем
- changed_dl_end -> prev = changed_dl_start;
- changed_dl_start -> next = changed_dl_end;
- changed_dl_start -> view();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement