Шаблонный двусвязный список
Мне нужно создать шаблонный класс - двусвязный список, а также методы - добавление элемента в конец или в начало списка. Пытаюсь распечатать список - на экран ничего не выводится, не пойму почему, вот код:
#include <iostream>
using namespace std;
template <class T>
class List {
private:
List<T>* head;
T data;
List<T>* next;
List<T>* prev;
public:
void CreateList(T data);
void Stack(T data);
void Queue(T data);
void Print(void);
~List() {
while (head != NULL) {
List<T>* elem = head->next;
delete head;
head = elem;
}
}
};
template <class T> void List<T>::CreateList(T data)
{
head = new List<T>;
this->data = data;
next = NULL;
prev = NULL;
}
template <class T> void List<T>::Stack(T data) {
List<T>* elem = new List<T>;
elem->data = data;
elem->next = head;
elem->prev = NULL;
head->prev = elem;
head = elem;
}
template <class T> void List<T>::Queue(T data) {
List<T>* elem = new List<T>;
elem->data = data;
List<T>* last = head;
while (last->next != NULL)
last = head->next;
last->next = elem;
elem->prev = last;
elem->next = NULL;
}
template <class T> void List<T>::Print(void) {
List<T>* elem = head;
while (elem != NULL) {
cout << elem->data << endl;
elem = elem->next;
}
}
void main(void)
{
List <int> list;
list.CreateList(1);
list.Stack(8);
list.Stack(4);
list.Queue(10);
list.Stack(2);
list.Stack(9);
list.Print();
list.~List();
}