2
public void reorderList(ListNode head) {3
if (head == null) return;5
// Find start of second list6
ListNode slow = head, fast = head;7
while (fast != null && fast.next != null) {12
ListNode list1 = head;13
ListNode list2 = reverseList(slow.next); // slow.next is start of list215
// Break first list from second list!18
// Merge list1 and list219
while (list2 != null) {20
ListNode l1Next = list1.next;21
ListNode l2Next = list2.next;22
list2.next = list1.next;29
private ListNode reverseList(ListNode node) {30
if (node == null) return node;31
ListNode newHead = null, currNode = node;32
while (currNode != null) {33
ListNode backup = currNode.next;34
currNode.next = newHead;