Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- struct ListElem
- {
- char value;
- ListElem *next;
- ListElem *prev;
- };
- class List
- {
- ListElem *pbeg, *pend;
- int Size = 0;
- public:
- List()
- {
- pend = pbeg = NULL;
- }
- int get_Size()
- {
- return Size;
- }
- void push_front(char val);
- void push_back(char val);
- bool ravenstvo(char a, char b, char c);
- void back(char val);
- void front(char val);
- void pop_front();
- void pop_back();
- void print();
- };
- void List::push_front(char val)
- {
- ListElem *pnew = new ListElem;
- pnew->value = val;
- pnew->next = NULL;
- pnew->prev = NULL;
- if (pbeg == NULL)
- {
- pbeg = pnew;
- pend = pnew;
- Size++;
- }
- else
- {
- pnew -> next = pbeg;
- pnew -> prev = NULL;
- pbeg->prev = pnew;
- pbeg = pnew;
- Size++;
- }
- }
- void List::push_back(char val)
- {
- ListElem *pnew = new ListElem;
- pnew->value = val;
- pnew->next = NULL;
- pnew->prev = NULL;
- if (Size == 0)
- {
- pbeg = pnew;
- pend = pnew;
- Size++;
- }
- else
- {
- pnew->next = NULL;
- pnew->prev = pend;
- pend->next = pnew;
- pend = pnew;
- Size++;
- }
- }
- void List::pop_front()
- {
- if (Size > 1)
- {
- ListElem *temp = pbeg->next;
- pbeg = pbeg->next;
- pbeg->next = temp->next;
- delete temp->prev;
- }
- else
- {
- pend = nullptr;
- pbeg = nullptr;
- }
- Size--;
- }
- void List::pop_back()
- {
- if (Size > 1)
- {
- ListElem *temp = pend->prev;
- pend = pend->prev;
- pend->prev = temp->prev;
- delete temp->next;
- }
- else
- {
- pend = nullptr;
- pbeg = nullptr;
- }
- Size--;
- }
- void List:: print()
- {
- ListElem *current = pbeg;
- for (int i = 0; i < Size; i++)
- {
- cout << current->value << " ";
- current = current->next;
- }
- }
- bool List::ravenstvo(char a, char b, char c)
- {
- if (a == b && b == c)
- return true;
- else return false;
- }
- void List:: back(char val)
- {
- if ( Size > 1 && ravenstvo(val, pend->value, pend->prev->value))
- {
- pop_back();
- pop_back();
- }
- else
- push_back(val);
- }
- void List:: front(char val)
- {
- if ( Size > 1 && ravenstvo(val, pbeg->value, pbeg->next->value))
- {
- pop_front();
- pop_front();
- }
- else
- push_front(val);
- }
- int main ()
- {
- List lst;
- int m, parametr, dlina;
- char shet;
- cin >> m;
- for (int i = 0; i < m; i++)
- {
- cin >> parametr;
- cin >> shet;
- if (parametr == 1)
- lst.front(shet);
- else lst.back(shet);
- }
- dlina = lst.get_Size();
- if (dlina > 0)
- lst.print();
- else cout << -1;
- }
- // в решении очень помог Максим Ткачев, у меня все время не находился предыдущий концу элемент, с указателями были проблемы, Максим дал много советов и я переписала код оптимально
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement