JAVA || O(N) Time || O(1) space
\nclass Solution {\n    \n    public static ListNode middleOfLL(ListNode head){\n        if(head==null){\n            return head;\n        }\n\n        ListNod
```\nclass Solution {\n    \n    public static ListNode middleOfLL(ListNode head){\n        if(head==null){\n            return head;\n        }\n\n        ListNode slow = head;\n        ListNode fast = head;\n\n        while(fast.next!=null && fast.next.next!=null){\n            slow = slow.next;\n            fast = fast.next.next;\n        }\n\n        return slow;\n\n    }\n\n    public static ListNode reverseOfLL(ListNode head){\n        ListNode prev = null;\n        ListNode curr = head;\n\n        while(curr!=null){\n            //preserve\n            ListNode next = curr.next;            \n\n            //link;\n            curr.next = prev;\n            \n            //move\n            prev = curr; \n            curr = next;\n        }\n\n        return prev;\n    }\n    \n    \n    public void reorderList(ListNode head) {\n        \n        ListNode mid = middleOfLL(head);\n        ListNode nh = mid.next;\n\n        mid.next = null;  //break link\n\n        nh = reverseOfLL(nh);\n\n        ListNode p1 = head;\n        ListNode p2 = nh;\n\n        while(p2!=null){\n            //preserve\n            ListNode n1 = p1.next;\n            ListNode n2 = p2.next;\n\n            //link;\n            p1.next = p2;\n            p2.next = n1;\n\n            //move\n            p1 = n1;\n            p2 = n2;\n        \n        }   \n\n    }\n    \n}\n```
['Linked List', 'Java']