#include<iostream>
using namespace std;
template<class T>
class Link
{
public:
Link();
void add(T& t);
void remove(T &t);
void print_link();
void modify(T &t);
~Link();
protected:
struct Node{
T data;
Node *next;
};
Node *head;
};
template<class T>
Link<T>::Link()
{
head = NULL;
}
template<class T>
void Link<T>::add(T& t)
{
Node *tmp = new Node;
tmp->data = t;
tmp->next = head;
head = tmp;
}
template<class T>
void Link<T>::remove(T& t)
{
Node* q;
if(head->data == t)
{
q = head;
head = head->next;
}
else
{
for(Node* p = head;p->next;p=p->next)
{
if(p->next->data == t)
{
q = p->next;
p->next = q->next;
break;
}
}
}
if(q)
{
delete q;
}
}
template<class T>
void Link<T>::print_link()
{
for(Node *p=head ; p ;p=p->next)
{
cout<<p->data<<" ";
}
cout<<endl;
}
template<class T>
Link<T>::~Link()
{
Node *q = NULL;
for(Node *p = head;p;p=p->next)
{
q = p;
delete q;
}
}