Optimising a LinkedList data structure - Part 1
There are several small things I can see in class Node:


You have a move constructor, but no copy constructor.
You have a move assignment operator, but no copy assignment operator.
Since you use C++11, you should replace the exception specification throw () (now deprecated) by noexcept.
Your move assignment operator is not protected against self-assignment. You should add the condition if (&amp;n != this) { ... }.
Also, if possible, your move constructor and operator= should be noexcept too.
Generally speaking, with move assignment operator, you don't want to move pointers, you only want to swap them since - I believe - your nodes own the pointed values (more information here).

Node&amp; operator=(Node&amp;&amp; n) noexcept {
    if (&amp;n != this) {
        std::swap(data, n.data);
        std::swap(prev, n.prev);
        std::swap(next, n.next);
    }
    return *this;
}