LeetCode 21. Merge Two Sorted Lists in F#

URL

leetcode.com/problems/merge-two-sorted-lists

Code

github.com/syohex/dotnet-study/blob/master/..

type LinkedList =
    | ListEnd
    | ListNode of int * LinkedList

    static member toList(r: LinkedList) : int list =
        let rec toList' r acc =
            match r with
            | ListEnd -> acc |> List.rev
            | ListNode (v, rest) -> toList' rest (v :: acc)

        toList' r []


let rec mergeTwoLists (list1: LinkedList) (list2: LinkedList) : LinkedList =
    match list1, list2 with
    | ListEnd, ListEnd -> ListEnd
    | _, ListEnd -> list1
    | ListEnd, _ -> list2
    | ListNode (v1, rest1), ListNode (v2, rest2) ->
        if v1 <= v2 then
            ListNode(v1, mergeTwoLists rest1 list2)
        else
            ListNode(v2, mergeTwoLists list1 rest2)