Rodex_ icon

linked_list_shared_ptr

Rodex_ | PRO | 06/18/17 04:41:39 PM UTC | 0 ⭐ | 243 👁️ | Never ⏰ | []
C++ |

1.48 KB

|

None

|

0 👍

/

0 👎

#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