This problem is quite similar to the one in Cracking the coding interview -> check palindrome linked-list.

Start from the mid, return the next node each time.

Can pass normal cases, no idea why cannot pass the large one..

Submission Result: Runtime Error

Last executed input: {3,2,3,3,3,1,3,1,3,3,1,1,3,3,2,1,1,1,1,2,1,1,2,1,2,1,3,2,...........

```
public class Solution {
public static void reorderList(ListNode head) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
int len = list_len(head);
if(len <= 2){
return;
}
else{
reorder_helper(head, 1, len);
}
}
public static ListNode reorder_helper(ListNode head, int level, int len){
ListNode temp;
ListNode current;
ListNode temp2;
if(level == len / 2){
if(len % 2 == 0){
temp = head.next.next;
head.next.next = null;
return temp;
}
else{
temp = head.next.next;
temp2 = head.next.next.next;
temp.next = head.next;
head.next.next = null;
head.next = temp;
return temp2;
}
}
current = reorder_helper(head.next, level + 1, len);
temp2 = current.next;
temp = head.next;
head.next = current;
current.next = temp;
return temp2;
}
public static int list_len(ListNode head){
if(head == null){
return 0;
}
else{
return list_len(head.next) + 1;
}
}
}
```