#include <iostream>
#include <string>
#define forn(i, n) for(int i = 1; i <= n; ++i)
using namespace std;
struct Node {
int m_val; // элементы списка
Node* m_pNext; // указатель на следующий элемент списка
Node(int val, Node* pNext) : m_val(val), m_pNext(pNext) {}
};
class List {
Node* m_pHead; // голова списка
public:
List() { // конструктор
m_pHead = NULL;
}
~List() { // деструктор
while (m_pHead != NULL) {
Node* pDeleted = m_pHead->m_pNext;
delete m_pHead;
m_pHead = pDeleted;
}
}
void // добавление нового элемента в список
Add(int newValue) {
Node* pAdded = new Node(newValue, m_pHead);
m_pHead = pAdded;
}
void // печать списка в прямом порядке
Print() {
Node* pNode = m_pHead;
while (pNode != NULL) {
cout << pNode->m_val << " ";
pNode = pNode->m_pNext;
}
}
void // печать списка в обратном порядке
ReversedPrint() {
Node* pNode(m_pHead);
if (pNode != NULL) {
m_pHead = m_pHead->m_pNext;
ReversedPrint();
cout << pNode->m_val << " ";
}
}
};
int main() {
List lst;
forn(i, 10)
lst.Add(i);
cout << "Direct printing:\n";
lst.Print();
cout << "\nReverse printing:\n";
lst.ReversedPrint();
return 0;
}