#ifndef LIST_H #define LIST_H #include #include #include "listnd.h" // You know this class // ------------------------------------------------------------------------- template class List { public: List(); void insertAtFront(const NODETYPE &); void insertAtBack(const NODETYPE &); bool isEmpty() const; void print() const; protected: ListNode *firstPtr; ListNode *lastPtr; ListNode *getNewNode(const NODETYPE &); }; template List ::List():firstPtr(0),lastPtr(0){} template void List::insertAtFront(const NODETYPE &value) { ListNode * newPtr=getNewNode(value); if (isEmpty()) firstPtr=lastPtr=newPtr; else { newPtr->nextPtr=firstPtr; firstPtr=newPtr; } } template void List::insertAtBack(const NODETYPE &value) { ListNode * newPtr=getNewNode(value); if (isEmpty()) firstPtr=lastPtr=newPtr; else { lastPtr->nextPtr=newPtr; lastPtr=newPtr; } } template bool List::isEmpty() const {return firstPtr==0;} template ListNode *List::getNewNode( const NODETYPE &value) { ListNode *ptr= new ListNode(value); assert(ptr!=0); return ptr; } template void List::print () const { if (isEmpty()) { cout<<"The list is empty\n\n"; return; } ListNode *currentPtr=firstPtr; while(currentPtr!=0){ currentPtr->data.print(); currentPtr=currentPtr->nextPtr; } cout<<"\n\n"; } #endif