Enter password:
Enter password:
Enter password:
#include < iostream > #include < cassert > using namespace std; class List; class Node{ public: Node(int data):data(data), next(NULL), previous(NULL) {} private: int data; Node* next; Node* previous; friend class Iterator; friend class List; }; class Iterator{ public: Iterator(): position(NULL), container(NULL) {} int get() const{ assert(position != NULL); return position->data; } void next(){ assert(position != NULL); position = position->next; } bool equals(Iterator iter){ return position == iter.position; } private: Node* position; List* container; friend class List; }; class List{ public: List(): first(NULL), last(NULL) {} void push_back(int data){ if(first == NULL) // when there is no node in the list { Node* new_node = new Node(data); first = new_node; last = new_node; return; } Node* new_node = new Node(data); last->next = new_node; new_node->previous = last; last = new_node; } void insert(Iterator iter, int data){ if(iter.position == NULL){ push_back(data); return; } Node* new_node = new Node(data); if(iter.position == first){ new_node->next = first; first->previous= new_node; first = new_node; return; } Node* after = iter.position; Node* before = iter.position->previous; new_node->next = after; new_node->previous = before; after->previous = new_node; before->next = new_node; } void remove(Iterator iter){ if(iter.position == NULL){ return; } if(iter.position == first){ Node* next_node = first->next; delete first; first = next_node; return; } if(iter.position == last){ Node* prev_node = last->previous; delete last; last = prev_node; return; } Node* current= iter.position; Node* after = iter.position->next; Node* before= iter.position->previous; before->next = after; after->previous = before; delete current; } void reverse(){ Node* tmp_first = first; Node* tmp_last = last; Iterator iter; iter = begin(); while(iter.equals(end()) == false){ Node* some_node = iter.position; Node* tmp_next = some_node->next; some_node->next = some_node->previous; some_node->previous = tmp_next; iter.position = iter.position->previous; } first = tmp_last; last = tmp_first; } Iterator begin(){ Iterator iter; iter.position = first; iter.container= this; return iter; } Iterator end(){ Iterator iter; iter.position = NULL; iter.container= this; return iter; } private: Node* first; Node* last; friend class Iterator; }; int main(){ List v; v.push_back(1); v.push_back(2); v.push_back(3); v.reverse(); Iterator iter; for(iter = v.begin(); iter.equals(v.end()) == false; iter.next()){ cout << iter.get() << endl; } }
Enter password:
class List{ public: // ... Member functions of List ... void reverse(){ Node* tmp_first = first; Node* tmp_last = last; Iterator iter; iter = begin(); while(iter.equals(end()) == false){ Node* some_node = iter.position; Node* tmp_next = some_node->next; some_node->next = some_node->previous; some_node->previous = tmp_next; iter.position = iter.position->previous; } first = tmp_last; last = tmp_first; } private: Node* first; Node* last; friend class Iterator; };
class List{ public: // ... Member functions of List ... void push_front(int data){ size ++; // no item in the list if(first == NULL){ Node* new_node = new Node(data); first = new_node; last = new_node; return; } // at least one item in the list Node* new_node = new Node(data); first->previous = new_node; new_node->next = first; first = new_node; } private: Node* first; Node* last; friend class Iterator; };
class List{ public: // ... Member functions of List ... void swap(List& other){ // TODO // swap first and first // swap last and last Node* original_first = first; Node* original_last = last; int orignal_size = size; first = other.first; last = other.last; size = other.size; other.first = original_first; other.last = original_last; other.size = orignal_size; } private: Node* first; Node* last; friend class Iterator; };
class List{ public: // ... Member functions of List ... int get_size(){ int count = 0; Iterator iter; for(iter = begin(); iter.equals(end()) == false; iter.next()){ count ++; } return count; } private: Node* first; Node* last; friend class Iterator; };