URL
https://leetcode.com/problems/middle-of-the-linked-list/description/?envType=daily-question&envId=2024-03-07
Code
https://github.com/syohex/dotnet-study/tree/master/fsharp/leetcode/challenge/202403/middle_of_the_linked_list/main.fsx
type ListNode =
| Leaf
| Node of int * ListNode
let middleNode (head: ListNode) : ListNode =
let rec middleNode' node i =
match node with
| Leaf -> i, Leaf
| Node(_, next) ->
let len, p = middleNode' next (i + 1)
match p with
| Leaf -> if i = len / 2 then len, node else len, Leaf
| _ -> len, p
middleNode' head 0 |> snd