#ifndef linkedlist_h #define linkedlist_h #include #include template class LinkedList { class ListNode { public: ListNode *next, *prev; T data; }; public: class Iterator { LinkedList *list; public: ListNode *current; void next() {current = current->next;} T &data() {return current->data;} bool isValid(){return current!=list->tail;}; Iterator (LinkedList &_list) {list = &_list; current=list->head->next;} }; ListNode *head, *tail; public: LinkedList(); void add (const T &data); bool isEmpty(); void remove(Iterator &i); }; #endif