rust 0ms, two pointers, advanced destrucuring while let
\npub fn middle_node(mut head: Option<Box<ListNode>>) -> Option<Box<ListNode>> {\n\tlet (mut fast, mut slow) = (&head, &head);\n\twhile let Some(ListNode {next:
```\npub fn middle_node(mut head: Option<Box<ListNode>>) -> Option<Box<ListNode>> {\n\tlet (mut fast, mut slow) = (&head, &head);\n\twhile let Some(ListNode {next: Some(node), ..}) = fast.as_deref() {\n\t\t// unwrap is fine here because fast is ahead so we know slow next will contain a node\n\t\tslow = &slow.as_ref().unwrap().next; \n\t\tfast = &node.next;\n\t}\n\tslow.clone()\n}\n```
['Rust']