ho l'impressione che l'errore derivi dallo scrivere male tutto: la tua condizione hasnext() quando diventerà false? Se ci fai caso avrai sempre e comunque degli elementi, perché tu controlli solo la head, non la tail.

Devi fermarti quando tail == next