My java solution in O(n) time
//1. find the middle node\n    //2. reverse the right side of the list\n    //3. merger the left side list and right side list\n    \n        \n        public c
    //1. find the middle node\n    //2. reverse the right side of the list\n    //3. merger the left side list and right side list\n    \n        \n        public class Solution {\n            public void reorderList(ListNode head) {\n                if(head==null) return;\n                ListNode slow = head, fast = head;\n                while(fast!=null && fast.next!=null){\n                    slow = slow.next;\n                    fast = fast.next.next;\n                }\n                ListNode mid = slow, cur = slow.next;\n                if(cur!=null){\n                    ListNode tmp = cur.next;\n                    cur.next = null;\n                    cur = tmp;\n                }\n                while(cur!=null){\n                    ListNode tmp = cur.next;\n                    cur.next = mid.next;\n                    mid.next = cur;\n                    cur = tmp;\n                }\n                ListNode left = head, right = mid.next;\n                while(right!=null){\n                    mid.next = right.next;\n                    right.next = left.next;\n                    left.next = right;\n                    left = right.next;\n                    right = mid.next;\n                }\n                \n            }\n        }
[]