Merge two sorted Linked List
Node constructor

It seems odd that we can only provide rvalues as argument to the constructor.  I'd expect to be able to pass by copy, too.

The usual way to allow that is to accept a T by value, and move-construct data from that value:

Node(T value = T()) : data(std::move(value)) {}


Note two other changes there: I've added a default argument, so we don't need to write a default constructor, and I've omitted the initialization of next, as we wrote a suitable default initializer for it.

List constructor

If we provide an initializer for head, we don't need to write a default constructor.

We might want to accept a list of elements when creating a linked list.  That would look something like this:

LinkedList() = default;
LinkedList(std::initializer_list&lt;T&gt; elements)
{
    for (auto&amp; e: elements)
         insert(std::move(e));
}


Pointer ownership

We need to be absolutely clear that every object created with new has exactly one owner, that knows when the object is no longer in use and will delete it at that point.  When moving nodes from one list to another, it is essential that the ownership is transferred - if both lists think they are owner of a node, it will be double-deleted, and if neither lists does, it will be leaked.

We can write code to do this manually, but it's easier and less error-prone to #include &lt;memory&gt; and then make use of the smart pointer types that are provided for us.