Il problema sta nel fatto che quando hai trovato per la prima volta un elemento, ottenendo il relativo valore di ptr, te continui a chiamare sempre
find( value, ptr);
ma ptr già punta al primo elemento trovato, quindi la funzione find trova sempre quell'elemento, e te lo ritonra nuovamente senza avanzare.
Quindi te devi modificare la tua funzione cosi:
codice:
while( ptr )
{
if( find( value, ptr ) ) ++cnt;
ptr = find( value, ptr );
ptr = ptr->next();
}
poi per evitare di chiamare due volte la funzione fined puoi fare cosi:
codice:
while( ptr )
{
ptr = find( value, ptr );
//Se un elemento è stato trovato ptr non è nullo
if(ptr) ++cnt;
ptr = ptr->next();
}