LeetCode 876. Middle of the Linked List in F#

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