/*--- LinkedList.h --------------------------------------------------------
  This header file contains the declarations of LinkedList, a class for
  singly-linked lists.
 
  Written by:   Larry R. Nyhoff
  Written for:  Lab Manual for ADTs, Data Structures, and Problem
                Solving with C++, 2E

                    Lab #5.1 and Projects 5.1 & 5.2
                              
   Add a list of the basic operations including brief descriptions.
   
   Add your name here and other info requested by your instructor.
   
 --------------------------------------------------------------------------*/

#ifndef LINKEDLIST
#define LINKEDLIST

#include <iostream>
using namespace std;

//----- Add typdef statement here

class LinkedList
{
 public:
   //------ LinkedList OPERATIONS


   // Prototype the class constructor here
   /* --- LinkedList constructor --------------------------------------
      Constructs an empty LinkedList object.

      Precondition:  None.
      Postcondition: This list's data members have been initialized 
          for an empty list.
   ---------------------------------------------------------------------*/

  // Prototype and document the size() operation here


  // Prototype and document display() here

 
  // Prototype insert() here

  /*----------------------------------------------------------------------
     Insert a value into a LinkedList at a given index.

     Precondition:  The first parameter, index, is an unsigned value with
         0 <= index <= mySize; the second parameter, dataValue, is an  
         ElementType value.  index = 0 denotes insertion at the beginning
         of the list, and index = mySize denotes insertion at the end 
         (after the current last element).
     Postcondition: dataValue has been inserted into this LinkedList
         object at the position determined by index (provided index 
         is a legal position).
  -----------------------------------------------------------------------*/

  // Prototype erase() here
  
  /*----------------------------------------------------------------------
     erase() removes a value from a LinkedList at a given index.

     Precondition:  The parameter index, an unsigned value, satisfies
                              0 <= index < mySize.  
     Postcondition: The data value at the position determined by index
         (provided index is a legal position) has been removed from 
         this LinkedList object. 
  -----------------------------------------------------------------------*/

 
   // Prototype and document the destructor here
  
  
  // Prototype and document the copy constructor here


  // Prototype and document the assignment operator here


private:
  class Node
  {
    public:

     //------ DATA MEMBERS OF Node
     // Define data and next members here


     //------ Node OPERATIONS

     // Prototype the Node constructor here

     /* --- The Node class constructor initializes a Node's data members.

        Precondition:  None
        Receive:       dataValue, an ElementType value;
        Postcondition: The data and next members have been set to
                       dataValue and 0, respectively.
     -------------------------------------------------------------------*/

   }; //--- end of Node class

   typedef Node * NodePointer;
   

   //------ DATA MEMBERS OF LinkedList
   // declare first as a pointer to a Node and declare mySize


}; //--- end of LinkedList class

// Put prototype of operator<<() here

#endif

