/**********************************************************************
 * I expect you to add appropriate documentation to this code.
 **********************************************************************/

#ifndef __LIST_H
#define __LIST_H

#include <stdlib.h>

struct ListItem
{
   ListItem* next;
   int exponent;
   double coeff;
};

typedef ListItem* ListP;

class List
{
 private:
   ListP l;

   void Copy(const List& b);
   void Free(void);

 public:
   List(void) : l(NULL) {}
   ~List();
   List(const List& b);
   const List& operator=(const List& b);
   int Insert(int exp, double co);
   int Retrieve(int exp, double& co) const;
   int Delete(int exp);
   void Print(void) const;   // For testing.
};

#endif
