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();
    }