

//   LINKEDLISTT.CC

#include "nodeT.cc"
#include "nodeT.h"
#include "linkedlistT.h"

template <class ElementType>
LinkedList<ElementType>::LinkedList() { header = new Node(); };

template <class ElementType>
void LinkedList<ElementType>::Insert(ElementType *elementptr) {
     Node<ElementType> *newnode;
     newnode  = new Node<ElementType>(indi);
     newnode->next = header->next;
     header->next = newnode; 
    }
     
template <class ElementType>
void LinkedList<ElementType>::Delete(ElementType *elementptr) {
     Node<ElementType> *current,*oldcurrent;
     oldcurrent = header; 
     current = header->next;
     while( current != NULL && *(current->data) != elementptr  )
             {  oldcurrent = current;  current = current->next; };
     if(current != NULL) 
          {
           oldcurrent->next  = current->next;
           delete current;
          }
    }

template <class ElementType>
bool LinkedList<ElementType>::Member(ElementType *elementptr) {
     Node<ElementType> *current;
     current = header->next;
     while( current != NULL && *(current->data) != *elementptr )
          current = current->next;
     if(current == NULL) 
        return(false);
        else return(true);
    }

template <class ElementType>
bool LinkedList<ElementType>::Empty()
     {  if( header->next == NULL) 
          return(true);
          else return(false);
     } 

template <class ElementType>
void LinkedList<ElementType>::PrintList() 
     {
     Node *current;
      if(Empty())
        cout << " - empty - \n";
        else 
           {
            current = header->next;
            while( current != NULL )
             {
               current->PrintNode();
               current = current->next; 
               cout << ", ";
             }
            cout << "\n";
           }
      }; 

template <class ElementType>
int LinkedList<ElementType>::Length()
      {
       Node *current = header->next;
       int counter = 0; 
       while( current != NULL )
         { current = current->next; 
           counter++;
         }
       return counter;
      }


template <class ElementType>
LinkedList<ElementType>::~LinkedList()     // Go through every Node of linked
   {                          //  list and delete each Node.
     Node *current, *previous;
     current = header;
     while( current != NULL )
         {  previous = current;
            current = current->next;
            delete previous;
         };
    };

