Deleting node from LinkedList
I believe these two lines are causing all the trouble.

 List* temp1 = head;
 List* temp2 = temp1-&gt;next;


temp2 never gets the head node because it is initialized as head-&gt;next to begin with.

I prefer double pointers since I find them rather cleaner.

void remove(Node&lt;ItemType&gt; * &amp; head, double value) {    
    Node&lt;ItemType&gt; **pp = &amp;head;
    Node&lt;ItemType&gt; *curr = head;
    while (curr) {
        if (curr-&gt;item == value) {
            *pp = curr-&gt;next;
            delete curr;
            curr = *pp;
        }
        else {
            pp = &amp;curr-&gt;next;
            curr = curr-&gt;next;
        }
    }
}