#ifndef LISTND_H
#define LISTND_H
template<class NODETYPE> class List;
template<class NODETYPE> class Polynom;
template<class NODETYPE>

// ListNode class
// Each node of the link list will be an object of the ListNode class
// -----------------------------------------------------------------------

class ListNode {
	friend class List<NODETYPE>;
        friend class Polynom<NODETYPE>;
	public:
		ListNode(const NODETYPE &);
		NODETYPE getData() const;
		void setData(NODETYPE &info);
		ListNode<NODETYPE> * getnextptr();
	private:
		NODETYPE data;
		ListNode <NODETYPE> *nextPtr;
};

// Constructor
// -------------------------------------------------------------------------
template<class NODETYPE>
ListNode<NODETYPE>::ListNode(const NODETYPE &info)
:data(info),nextPtr(0) {}

// getData function returns the data of the node
// -------------------------------------------------------------------------
template <class NODETYPE>
NODETYPE ListNode<NODETYPE>::getData() const 
{ 
	return data;
}

// setData sets the data part of the object to the value given as a parameter
// -------------------------------------------------------------------------
template <class NODETYPE>
void ListNode<NODETYPE>::setData(NODETYPE &info)
{
	data=info;
}

// getnextptr returns the nextptr of the object
// ------------------------------------------------------------------------
template <class NODETYPE>
ListNode<NODETYPE> * ListNode<NODETYPE>::getnextptr()
{
	return nextPtr;
}
#endif

