#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();
}
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8v5YmN572u5aOw5piOCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpjbGFzcyBsaXN0OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIG5vZGUKewoJVCBkYXRhOwoJbm9kZSAqbmV4dDsKcHVibGljOgoJbm9kZShUIGQgPSAwKSA6ZGF0YShkKSwgbmV4dChOVUxMKQoJewoKCX0KCWZyaWVuZCBjbGFzcyBsaXN0PFQ+Owp9Owp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KY2xhc3MgbGlzdAp7CnB1YmxpYzoKCWxpc3QoKSA6aGVhZChOVUxMKQoJewoKCX0KCXZvaWQgcHVzaChUIGRhdGEpOwoJdm9pZCBwcmludCgpOwpwcml2YXRlOgoJbm9kZTxUPiAqaGVhZDsKfTsKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnZvaWQgbGlzdDxUPjo6cHVzaChUIGRhdGEpCnsKCW5vZGU8VD4gKnMgPSBuZXcgbm9kZTxUPihkYXRhKTsKCWlmICghaGVhZCkKCXsKCQloZWFkID0gczsKCQlyZXR1cm47Cgl9Cglub2RlPFQ+ICpwID0gaGVhZDsKCXdoaWxlIChwLT5uZXh0KQoJewoJCXAgPSBwLT5uZXh0OwoJfQoJcC0+bmV4dCA9IHM7Cn0KdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnZvaWQgbGlzdDxUPjo6cHJpbnQoKQp7Cglub2RlPFQ+ICpwID0gaGVhZDsKCXdoaWxlIChwKQoJewoJCWNvdXQgPDwgcC0+ZGF0YSA8PCBlbmRsOwoJCXAgPSBwLT5uZXh0OwoJfQp9CmludCBtYWluKCkKewoJbGlzdDxpbnQ+IGE7CglhLnB1c2goMSk7CglhLnB1c2goMik7CglhLnB1c2goMyk7CglhLnB1c2goNSk7CglhLnByaW50KCk7Cn0=