Implementation of a Singularly LinkedList
C++ is not Java. You may safely get rid of all this-&gt;.
The client doesn't need to know about Node. Make it an inner class of the LinkedList.
The ~LinkedList() destructor is missing. You should also consider (or prohibit) the copy constructor, operator=, and move constructor.
add(int data, int position) may silently leak memory. If the position is too large, the created node is not linked into the list, and is lost. Also, there is no way to prepend a node.
I don't like the temp_head approach. Better leave the head alone, and iterate using a cursor variable, e.g.:

void LinkedList::print() {
    Node * cursor = head;
    while (cursor) {
        std::cout &lt;&lt; cursor-&gt;data &lt;&lt; '\n';
        cursor = cursor-&gt;next;
    }
}


At least, there is no need to restore head.

Ditto for add.