for gaminid

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#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;
}