Se gli elementi sono diversi devi ritornare false.
Poi sta eseguendo la sottolista senza prenderne il risultato.
Modificala così:

codice:
bool sottolista(list *head1,list *head2){
     if(head1 != NULL && head2 != NULL){
       if(head1->info != head2->info)
        return false;  // perchè chiamare ricorsivamente la sottolista?
     else                           // il confronto ha avuto esito negativo
        return sottolista(head1->next,head2->next);
     }
     if(head2 == NULL) return true;
     else return false;
}