Linked list using dynamic memory
Memory Leaks

You aren't cleaning up after your LinkedList.  When the class is destroyed you want to make sure that all of the memory it has allocated is cleaned up.  At a minimum, you're going to want to:

LinkedList::~LinkedList()
{
    delete head;
}


However you also need to consider each node in the list.  You can either have ~Node delete it's next, or you can put a loop in to delete all the items in the list from the tail backwards.  Usually you would also implement this in a public function like clear or flush so that the whole list can be easily emptied.  For example, something like this would clear up the list:

void clearList() {
    Node *tmp = head;
    while(tmp) {
        head = tmp-&gt;get_next();
        delete tmp;
        tmp = head;
    }
}


Exit

You exit if there is insufficient memory to allocate a node.  The exitcode 0 is usually reserved for a successful program exit.  You should be passing a different value to exit (usually a negative number) to indicate failure.

Heads or Tails

In your remove_item method, you're not updating your tail pointer, what is going to happen if the tail happens to be pointing at the node that contains the value you remove?  Similarly, what happens if moving_ptr is pointing at the node that's removed?

reset

I'd honestly expect this to clear/flush/empty the list, not just reset the pointer that's used for iterating over items in the list.  This is likely to be confusing.

templates

Depending on what it is you're practising for, a good next step would be to adapt your Node so that it can support a templated value type.  You could then extend the list to store and retrieve values of any type.