#include struct node { int data; node *next; node(int d): data(d), next(NULL) {} }; class List { public: List(): head(NULL), last(NULL), count(0) {} ~List() { clear(); } void clear() {} node *push_back(int data) { node *temp = new node(data); if( empty() ) head = temp; else last->next = temp; last = temp; count++; return temp; } node *push_front(int data) { node *temp = new node(data); if( empty() ) last = temp; else temp->next = head; head = temp; count++; return temp; } inline bool empty() { return count==0; } inline node *begin() { return head; } protected: node *head; node *last; int count; }; int main() { int i; List l; for( i=0 ; i<10 ; i++ ) l.push_back(i); for( i=0 ; i<10 ; i++ ) l.push_front(i); node *iter = l.begin(); while( iter!=NULL ) { std::cout << iter->data << ' '; iter = iter->next; } std::cout << std::endl; return 0; }