#include #include #include "list.h" List::List() { head = NULL; } bool List::IsEmpty() const{ return(head == NULL); } bool List::IsFull() const{ return(false); } int recur_len(node * np) { if (NULL == np) { return(0); } else { return(1+recur_len(np->next)); } } int List::Length() const{ return(recur_len(head)); } node * rec_insert( node * np, ItemType item) { node * tmp; if ((np == NULL) || (np->data > item)) { tmp = new node; tmp->data = item; tmp->next = np; return(tmp); } else { np->next = rec_insert(np->next,item); return(np); } } void List::Insert(ItemType item){ head = rec_insert(head, item); } node * recur_delete(node * np, ItemType item) { node * tmp; if (np == NULL) { return(np); } else if (np-> data == item) { tmp = np->next; delete np; return(tmp); } else { np->next = recur_delete(np->next,item); return(np); } } void List::Delete(ItemType item){ head = recur_delete(head,item); } bool recur_ispresent(node * np, ItemType item) { if (np == NULL) { return(false); } else if (np->data == item) { return(true); } else { return(recur_ispresent(np->next,item)); } } bool List::IsPresent(ItemType item) const { return(recur_ispresent(head,item)); } void rec_print(node * np) { if (np != NULL) { cout << np->data << " "; rec_print(np->next); } } void List::Print() const{ rec_print(head); } void List::operator =(List & L) { node * tmp; node * added; while (head != NULL) { tmp = head; head = head->next; delete tmp; } head = NULL; tmp = L.head; while (tmp != NULL) { added = new node; added->data = tmp->data; added->next = head; head = added; // this was missing from our in class implementation tmp = tmp-> next; } }