#ifndef LISTNODE_H_ #define LISTNODE_H_ #define ListNodePosi(T) ListNode* template class ListNode{ public: ListNodePosi(T) prev; ListNodePosi(T) succ; T val; //constructor ListNode(); ListNode(T val, ListNodePosi(T) const &p = nullptr, ListNodePosi(T) const &s = nullptr); //external interfaces ListNodePosi(T) insertAsPred(T const &val); ListNodePosi(T) insertAsSucc(T const &val); }; /*----------implementation of class ListNode----------*/ //constructor template ListNode::ListNode(){ prev = nullptr; succ = nullptr; } template ListNode::ListNode( T v, ListNodePosi(T) const &p = nullptr, ListNodePosi(T) const &s = nullptr ){ val = v; prev = p; succ = s; } //external interfaces template ListNodePosi(T) ListNode::insertAsPred(T const &val){ ListNodePosi(T) newNode = new ListNode(val, prev, this); prev->succ = newNode; prev = newNode; return newNode; } template ListNodePosi(T) ListNode::insertAsSucc(T const &val){ ListNodePosi(T) newNode = new ListNode(val, this, succ); succ->prev = newNode; succ = newNode; return newNode; } #endif