JavaScript solution with 3 steps
Steps:\n1. use fast & slow pointer to get to the middle of linked list. Note when list has even number of nodes, get the middle left node of the list.\n2. break
##### Steps:\n1. use fast & slow pointer to get to the middle of linked list. Note when list has even number of nodes, get the middle left node of the list.\n2. break the list in the middle, and reverse the second half of the list \n3. interleave the reversed second half with the first half\n\nImplementation:\n```js\nvar reorderList = function(head) {\n  // nothing need to be done in case list is either empty or contains only one or two nodes\n  if (!head || !head.next || !head.next.next) return head;\n\n  // step 1: use fast and slow pointer to move to the middle of linked list\n  // in case list is even, then move to the middle left node\n  let fast = head.next, slow = head;\n  while (fast && fast.next) {\n    fast = fast.next.next;\n    slow = slow.next;\n  }\n\n  // get the second half of list\n  const secondHalf = slow.next;\n\n  // break the list\n  slow.next = null;\n\n  // step 2: reverse the second half\n  let curr = secondHalf, prev = null, tmp;\n\n  while (curr) {\n    tmp = curr.next;\n    curr.next = prev;\n    prev = curr;\n    curr = tmp;\n  }\n\n  // step 3: interleave the first half with second half\n  let first = head, second = prev;\n  while (second) {\n    tmp = first.next;\n    first.next = second;\n    second = second.next;\n    first.next.next = tmp;\n    first = tmp;\n  }\n};\n```\nHappy Coding~
[]