class LinkedList(T) { private: struct LinkNode { T data; LinkNode *next; LinkNode *prev; } LinkNode head; public: this() { head.next = &head; head.prev = &head; } void add( T data ) { LinkNode *n = new LinkNode; n.next = &head; n.prev = head.prev; n.next.prev = n; n.prev.next = n; n.data = data; } void rem( T data ) { for ( LinkNode *n = head.next; n != &head; n = n.next ) { if ( n.data == data ) { n.prev.next = n.next; n.next.prev = n.prev; delete n; break; } } } }