Java solution with 3 steps
This question is a combination of Reverse a linked list I & II. It should be pretty straight forward to do it in 3 steps :)\n\n    public void reorderList(ListN
This question is a combination of **Reverse a linked list I & II**. It should be pretty straight forward to do it in 3 steps :)\n\n    public void reorderList(ListNode head) {\n                if(head==null||head.next==null) return;\n                \n                //Find the middle of the list\n                ListNode p1=head;\n                ListNode p2=head;\n                while(p2.next!=null&&p2.next.next!=null){ \n                    p1=p1.next;\n                    p2=p2.next.next;\n                }\n                \n                //Reverse the half after middle  1->2->3->4->5->6 to 1->2->3->6->5->4\n                ListNode preMiddle=p1;\n                ListNode preCurrent=p1.next;\n                while(preCurrent.next!=null){\n                    ListNode current=preCurrent.next;\n                    preCurrent.next=current.next;\n                    current.next=preMiddle.next;\n                    preMiddle.next=current;\n                }\n                \n                //Start reorder one by one  1->2->3->6->5->4 to 1->6->2->5->3->4\n                p1=head;\n                p2=preMiddle.next;\n                while(p1!=preMiddle){\n                    preMiddle.next=p2.next;\n                    p2.next=p1.next;\n                    p1.next=p2;\n                    p1=p2.next;\n                    p2=preMiddle.next;\n                }\n            }
['Java']