#ifndef SORTEDLIST_H #define SORTEDLIST_H #include #include template class SortedList; template class SortedListIterator; template class ListNode { friend class SortedList; public: ListNode (const NODETYPE &); NODETYPE Info (); private: NODETYPE myInfo; ListNode* myNext; }; template ListNode::ListNode (const NODETYPE &value) { myInfo = value; myNext = 0; } template NODETYPE ListNode::Info () { return myInfo; } template class SortedList { public: SortedList (); ~SortedList (); SortedList (const SortedList &); void Insert (const NODETYPE &); bool IsEmpty (); private: ListNode * myFirst; }; ___ { // constructor myFirst = 0; } ___ { // destructor if (!IsEmpty ()) { cerr << "*** in destructor, destroying: "; ListNode * current = myFirst; ListNode * temp; while (current != 0) { cerr << " " << current->myInfo; temp = current; current = current->myNext; delete temp; } cerr << endl; } } ___ { // copy constructor cerr << "*** in copy constructor" << endl; ListNode * listCurrent = list.myFirst; ListNode * newCurrent = 0; while (listCurrent != 0) { ListNode *temp = new ListNode (listCurrent->Info ()); if (newCurrent == 0) { myFirst = temp; newCurrent = myFirst; } else { newCurrent->myNext = temp; newCurrent = temp; } listCurrent = listCurrent->myNext; } } ___ { // Insert ListNode *toInsert = new ListNode (value); if (IsEmpty ()) { myFirst = toInsert; } else if (value < myFirst->Info ()) { toInsert->myNext = myFirst; myFirst = toInsert; } else { ListNode *temp = myFirst; for (temp = myFirst; temp->myNext != 0 && temp->myNext->Info () < value; temp = temp->myNext) { } toInsert->myNext = temp->myNext; temp->myNext = toInsert; } } ___ { // IsEmpty return myFirst == 0; } #endif