//////////////////////////////////////////////////////
#ifndef NODE_CLASS
#define NODE_CLASS

//define class Node

template <class T>
class Node
{
public:

 Node(const T& item , Node<T> *prtNext = NULL);
 void InsertAfter(Node<T> *p);//在本节点后插入同一类型的节点P;
 void DeleteAfter(); //删除当前节点的后继节点
 T GetData();
 Node<T> *GetNext();
 Node<T> *NextNode() const;//获取后继节点的地址
 void DisplayNode();
private:
 T data;
 Node<T> *next;
 //T data;
};


template <class T>
Node<T>::Node(const T& item, Node<T> *prtnext = NULL)
:data(item),next(prtnext)
{
 //const T& item//常引用所引用的对象不能被更新
}


template <class T>
void Node<T>::InsertAfter(Node<T> *p)
{
 p->next = next;
 next = p;
}

 

//delete the current node
template <class T>
void  Node<T>::DeleteAfter()//
{
 Node<T> *tempPtr = next;

 next = tempPtr->next; 

 //delete tempPtr;   多余?   
}           

template <class T>
T Node<T>::GetData()
{
 return data;
}

template <class T>
Node<T> *Node<T>::GetNext()
{
 return Next;
}

template <class T>
Node<T> *Node<T>::NextNode() const
{
 return next;
}

template <class T>
void  Node<T>:: DisplayNode()
{
 cout<<GetData()<<"  ";
}
#endif;