@@ -0,0 +1,1270 @@
+public class Solution %7B%0A    public void reorderList(ListNode head) %7B%0A        if(head == null %7C%7C head.next == null %7C%7C head.next.next == null)%7B%0A        %09return;%0A        %7D%0A%0A        // find one node before mid, cut into two half, reverse second half, then append one by one%0A        ListNode runner = head;%0A        int len = 0;%0A%0A        while(runner != null)%7B%0A        %09runner = runner.next;%0A        %09len++;%0A        %7D%0A%0A        int mid = len / 2;%0A        int counter = 0;%0A        runner = head;%0A%0A        while(counter != mid - 1)%7B%0A        %09runner = runner.next;%0A        %7D%0A%0A        ListNode secondHalf = runner.next;%0A        runner.next = null;%0A%0A        ListNode current = secondHalf;%0A        ListNode previous = null;%0A%0A        while(current != null)%7B%0A        %09ListNode tempNext = current.next;%0A        %09current.next = previous;%0A        %09previous = current;%0A        %09current = tempNext;%0A        %7D%0A%0A        ListNode tailRunner = previous;%0A        ListNode headRunner = head;%0A%0A%0A        while(tailRunner != null)%7B%0A        %09ListNode tempHeadNext = headRunner.next;%0A        %09headRunner.next = tailRunner;%0A        %09headRunner = tempHeadNext;%0A        %09ListNode tempTailNext = tailRunner.next;%0A        %09tailRunner.next = headRunner;%0A        %09tailRunner = tempTailNext;%0A        %7D%0A    %7D%0A%7D

add reorder list solution;