HarmonySoft-36

  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
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <iostream>
#include <string>
#include <stack>
class List {
struct node {
int data;
node* next;
};
node* top;
public:
List();
~List();
void append(int);
/**
* I think, this function should be push in destructor. But this is simple example.
* I want to show clearly how it work
*
* @return void
*/
void freeMemory();
void reverse();
int removeLast();
void visit();
List::node* search(node*);
};
List::List() {
top = NULL;
}
List::~List() {
}
void List::append(int item) {
node* m = new node;
m->next = NULL;
m->data = item;
node* last;
if (NULL == top) {
top = m;
} else {
node* temp = top;
while (NULL != temp) {
last = temp;
temp = temp->next;
}
last->next = m;
}
}
int List::removeLast() {
if (top == NULL) return 0;
node* last;
node* temp = top;
while(NULL != temp->next) {
last = temp;
temp = temp->next;
}
node* saved = temp;
last->next = NULL;
delete temp;
return saved->data;
}
void List::reverse() {
node* temp = top;
std::stack<node*> stck;
while (NULL != temp) {
stck.push(temp);
temp = temp->next;
}
freeMemory();
top = NULL;
while (!stck.empty()) {
append(stck.top()->data);
stck.pop();
}
}
void List::visit() {
if (top == NULL) {
std::cout<<"End Of List"<<std::endl;
} else {
std::cout<<top->data<<"->";
top = top->next;
visit();
}
}
/**
* I think, this function should be push in destructor. But this is simple example.
* I want to show clearly how it work
*
* @return void
*/
void List::freeMemory() {
while (top != NULL) {
node* saved = top;
top = top->next;
delete saved;
}
}
int main() {
List t;
t.append(5);
t.append(6);
t.append(7);
t.append(8);
//std::cout<<t.removeLast()<<std::endl;
t.reverse();
t.visit();
t.freeMemory();
return 0;
}