Он печатает содержимое связанного списка с конца.
Рассмотрим этот простой список: 1 -> 2 -> 3
Теперь давайте «разложим» вызовы:
reverse(1) :
reverse(2) :
reverse(3) :
print(3)
print(2)
print(1)
Волшебство c происходит потому, что println вызывается после вызова рекурсии! Попробуйте поставить перед тем, как распечатать список в обычном порядке.