Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pt4.h"
- #include <fstream>
- using namespace std;
- struct TList {
- PNode Current;
- };
- typedef TList* PList;
- PNode GetCurrent(PList list);
- void SetCurrent(PList list, PNode current);
- PNode MoveToFirst(PList list);
- PNode MoveToLast(PList list);
- bool IsStandalone(PNode current);
- void DeleteCurrent(PList list);
- void Solve()
- {
- Task("ListWork65");
- PNode first;
- pt >> first;
- string fileName;
- pt >> fileName;
- ofstream file(fileName);
- PList list = new TList;
- SetCurrent(list, first);
- PNode current;
- bool goToLast = true;
- while (GetCurrent(list) != NULL) {
- current = goToLast ? MoveToLast(list) : MoveToFirst(list);
- file << current->Data;
- if (!IsStandalone(current))
- file << ' ';
- DeleteCurrent(list);
- goToLast = !goToLast;
- }
- file.close();
- }
- PNode GetCurrent(PList list) {
- return list->Current;
- }
- void SetCurrent(PList list, PNode current) {
- list->Current = current;
- }
- PNode MoveToFirst(PList list) {
- PNode current = GetCurrent(list);
- while (current->Prev != NULL)
- current = current->Prev;
- SetCurrent(list, current);
- return current;
- }
- PNode MoveToLast(PList list) {
- PNode current = GetCurrent(list);
- while (current->Next != NULL)
- current = current->Next;
- SetCurrent(list, current);
- return current;
- }
- bool IsStandalone(PNode current) {
- return current->Next == NULL && current->Prev == NULL;
- }
- void DeleteCurrent(PList list) {
- PNode current = list->Current;
- if (current == NULL)
- return;
- PNode prev = current->Prev;
- PNode next = current->Next;
- if (prev != NULL)
- prev->Next = next;
- if (next != NULL)
- next->Prev = prev;
- delete current;
- SetCurrent(list, prev != NULL ? prev : next);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement