template <class T>
class List {
// constructors
List();
// operations
void Add(T v)
{ firstElement = new Link<T>(v, firstElement); }
int isEmpty()
{ return firstElement == 0; }
T First()
{ return firstElement->value; }
void RemoveFirst()
{ Link<T> * p = firstElement;
firstElement = p->next;
delete p; }
int Includes(T v)
{ for (Link<T> * p = firstElement; p; p = p->next)
if (v == p->value)
return 1;
return 0; }
};
template <class T>
class Link {
// constructor
Link (T v, Link * n) : value(v), next(n) { }
// data fields
Link * next;
T value;
};