My python solution with some comments. O(1) space (easy to understand)
\nclass Solution:\n    def reorderList(self, head):\n        """\n        :type head: ListNode\n        :rtype: void Do not return anything, modify head in-plac
```\nclass Solution:\n    def reorderList(self, head):\n        """\n        :type head: ListNode\n        :rtype: void Do not return anything, modify head in-place instead.\n        """\n        if head and head.next and head.next.next:   #check if the list has two more nodes\n            \n            # partition the nodes into two parts\n            pre, slow, fast = ListNode(None), head, head\n            while fast and fast.next:\n                pre, slow, fast = slow, slow.next, fast.next.next\n            pre.next = None\n            \n            # reverse the second half\n            temp = None\n            while slow:\n                nxt = slow.next\n                slow.next = temp\n                temp = slow\n                slow = nxt\n                \n            # reorder two parts\n            dummy = head\n            while dummy and temp:\n                nxt= dummy.next\n                dummy.next,dummy,temp = temp, temp, nxt\n```\nInput: [1,2,3,4,5,6]\nStep 1: partition the input into two parts -- head: [1,2,3], slow: [4,5,6]\nStep 2: reverse slow, temp: [6,5,4]\nStep 3: at the first node of head, temp is inserted. then head.next is inserted, etc.
[]