question: public List < A > reverse ( ) { if ( isEmpty ( ) || tail . isEmpty ( ) ) return this ; List < A > rev = nil ( ) ; for ( List < A > l = this ; l . nonEmpty ( ) ; l = l . tail ) rev = new List < A > ( l . head , rev ) ; return rev ; }
target:  Reverse list. If the list is empty or a singleton, then the same list is returned. Otherwise a new list is formed.