#include<iostream>
using namespace std;
//前置声明
template <typename T>
class list;

template <typename T>
class node
{
	T data;
	node *next;
public:
	node(T d = 0) :data(d), next(NULL)
	{

	}
	friend class list<T>;
};
template <typename T>
class list
{
public:
	list() :head(NULL)
	{

	}
	void push(T data);
	void print();
private:
	node<T> *head;
};
template <typename T>
void list<T>::push(T data)
{
	node<T> *s = new node<T>(data);
	if (!head)
	{
		head = s;
		return;
	}
	node<T> *p = head;
	while (p->next)
	{
		p = p->next;
	}
	p->next = s;
}
template <typename T>
void list<T>::print()
{
	node<T> *p = head;
	while (p)
	{
		cout << p->data << endl;
		p = p->next;
	}
}
int main()
{
	list<int> a;
	a.push(1);
	a.push(2);
	a.push(3);
	a.push(5);
	a.print();
}