1template<typename T>
2class list {
3 public:
4
5 struct node {
6 T value;
7 node* next;
8 };
9
10 list() : hd(nullptr), tl(nullptr) {}
11
12 node* head() { return hd; }
13 node* tail() { return tl; }
14
15 void insert(node* prior, T value);
16
17 node* at(int i);
18
19 void erase(node* prior);
20 void clear();
21
22 void push_back(T value);
23 void pop_back();
24
25 void push_front(T value);
26 void pop_front();
27
28 int size();
29
30 private:
31 node* hd, tl;
32}
33