#include <iostream>
#include <stack>
class List {
struct node {
int data;
node* next;
};
/**
* pointer to first item of list
*/
node* top;
public:
/**
* Default constructor
*/
List();
/**
* Default destructor
*/
~List();
/**
* Add more item in the list
*
* @return void
*/
void push(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 clear();
/**
* reverse the list
*
* @use std::stack
* @return void
*/
void reverse();
/**
* Get the last item in the list and delete it from list
*
* @param
* @return int, value of node
*/
int pop();
/**
* print all node of list
*
* @return void
*/
void print();
/**
* Search node in the list
*
* @return node*
*/
List::node* search(int);
};
List::List() {
top = NULL;
}
List::~List() {
}
void List::push(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::pop() {
if (top == NULL) return 0;
node* last;
node* temp = top;
while (NULL != temp->next) {
last = temp;
temp = temp->next;
}
int saved = temp->data;
last->next = NULL;
delete temp;
return saved;
}
void List::reverse() {
node* temp = top;
std::stack<node*> stck;
while (NULL != temp) {
stck.push(temp);
temp = temp->next;
}
top = NULL;
while (!stck.empty()) {
push(stck.top()->data);
stck.pop();
}
}
void List::print() {
if (NULL == top) {
std::cout << "End Of List" << std::endl;
} else {
std::cout << top->data << "->";
top = top->next;
print();
}
}
List::node* List::search(int key) {
node* temp = top;
while (key != temp->data) {
temp = temp->next;
if (NULL == temp) {
return NULL;
}
}
return temp;
}
void List::clear() {
while (NULL != top) {
node* saved = top;
top = top->next;
delete saved;
}
}
int main() {
List t;
t.push(5);
t.push(6);
t.push(7);
t.push(8);
std::cout << t.pop() << std::endl;
t.reverse();
std::cout<<t.search(6)->data<<std::endl;
t.print();
t.clear();
return 0;
}