Шаблонный двусвязный список

Мне нужно создать шаблонный класс - двусвязный список, а также методы - добавление элемента в конец или в начало списка. Пытаюсь распечатать список - на экран ничего не выводится, не пойму почему, вот код:

#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();
}

Ответы (0 шт):