LeetCode 2130. Maximum Twin Sum of a Linked List in F#

URL

https://github.com/syohex/dotnet-study/tree/master/fsharp/leetcode/challenge/202305/maximum_twin_sum_of_a_linked_list/main.fsx

type ListNode =
    | Leaf
    | Node of int * ListNode

let pairSum (head: ListNode) : int =
    let rec listNodeToList node acc =
        match node with
        | Leaf -> List.rev acc
        | Node(v, next) -> listNodeToList next (v :: acc)

    let lst = listNodeToList head []
    let len = List.length lst
    let front, back = List.take (len / 2) lst, List.skip (len / 2) lst

    List.zip front (List.rev back) |> List.map (fun (a, b) -> a + b) |> List.max