static <T> TailCall<LinkedList<T>> reverse(LinkedList<T> sourceList, LinkedList<T> reverseList) { if (null == sourceList) { return TailCall.done(reverseList); } return TailCall.scheduleRecursion( () -> { return reverse(sourceList.tail(), reverseList.insert(sourceList.head())); }); }