#include <iostream>
#include <memory>
using namespace std;
int node_counter = 0;
template<typename T> class LinkedList;
template<typename T>
class Node
{
friend class LinkedList<T>;
private:
T _val;
shared_ptr<Node<T>> _prev;
shared_ptr<Node<T>> _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<Node<T>> getPrev() { return _prev; }
shared_ptr<Node<T>> getNext() { return _next; }
};
template<typename T>
class LinkedList
{
private:
shared_ptr<Node<T>> _head;
shared_ptr<Node<T>> _tail;
public:
shared_ptr<Node<T>> getHead() { return _head; }
shared_ptr<Node<T>> getTail() { return _tail; }
void add(T element)
{
auto new_node = make_shared<Node<T>>(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();
}
}
};
Comments