Rust 4ms
Very long solution.\n1. Calculate the length\n2. Traverse half way\n3. Reverse the second half\n4. Merge\n\n\nimpl Solution {\n    pub fn reorder_list(head: &mu
Very long solution.\n1. Calculate the length\n2. Traverse half way\n3. Reverse the second half\n4. Merge\n\n```\nimpl Solution {\n    pub fn reorder_list(head: &mut Option<Box<ListNode>>) {\n        let len = Self::length(&head);\n\n        let mut ptr = head.as_mut();\n        for _ in 0..(len / 2) {\n            if let Some(node) = ptr {\n                ptr = node.next.as_mut();\n            }\n        }\n\n        if let Some(node) = ptr {\n            let reverse = Self::reverse(node.next.take(), None);\n\n            if let Some(node) = head {\n                node.next = Self::merge(reverse, node.next.take(), len - 1);\n            }\n        }\n    }\n\n    fn length(mut head: &Option<Box<ListNode>>) -> usize {\n        let mut count = 0;\n        while let Some(node) = head {\n            head = &node.next;\n            count += 1;\n        }\n        count\n    }\n\n    fn reverse(\n        head: Option<Box<ListNode>>,\n        accumulator: Option<Box<ListNode>>,\n    ) -> Option<Box<ListNode>> {\n        match head {\n            None => accumulator,\n            Some(mut node) => {\n                let next = node.next;\n                node.next = accumulator;\n\n                Self::reverse(next, Some(node))\n            }\n        }\n    }\n\n    fn merge(\n        mut left: Option<Box<ListNode>>,\n        right: Option<Box<ListNode>>,\n        count: usize,\n    ) -> Option<Box<ListNode>> {\n        if count == 0 {\n            None\n        } else {\n            match (left.as_mut(), right.as_ref()) {\n                (None, None) => None,\n                (Some(_), None) => left,\n                (None, Some(_)) => right,\n                (Some(l), Some(_)) => {\n                    l.next = Self::merge(right, l.next.take(), count - 1);\n                    left\n                }\n            }\n        }\n    }\n}\n```
[]