#include #include using namespace std; int node_counter = 0; template class LinkedList; template class Node { friend class LinkedList; private: T _val; shared_ptr> _prev; shared_ptr> _next; public: Node(T v) : _val(v) { cout << " " << "Constructing Node " << v << endl; node_counter++; } virtual ~Node() { cout << " " << "Destructing Node " << _val << endl; node_counter--; } T getVal() { return _val; } shared_ptr> getPrev() { return _prev; } shared_ptr> getNext() { return _next; } }; template class LinkedList { private: shared_ptr> _head; shared_ptr> _tail; public: shared_ptr> getHead() { return _head; } shared_ptr> getTail() { return _tail; } void add(T element) { auto new_node = make_shared>(element); //Wenn erstes Element dann füge es in das headelement ein if(_tail == nullptr){ _head = new_node; _tail = new_node; }else{ _tail->_next = new_node; new_node->_prev = _tail; new_node->_next = nullptr; _tail = new_node; } } void clear() { auto temp = _head; while(temp != nullptr){ temp = _head->_next; _head->_next.reset(); _head.reset(); } } };