|Well, I'm not that friend of recursion, too, but my iterative solution killed the testing framework ^^
Your for-loop has to start at 1, else you reach the first element of the right sub-list.
The 2nd for-loop is redundant.
lastRight = in.first.previous; will do the same much quicker and less error-prone.
Except for the missing recursive calls, the merge part and testing for special cases, it doesn't look so bad.