LeetCode 82. Remove Duplicates from Sorted List II in F#
URL
leetcode.com/problems/remove-duplicates-fro..
Code
github.com/syohex/dotnet-study/blob/master/..
type LinkedList =
| ListEnd
| ListNode of int * LinkedList
static member toList (lst: LinkedList) : int list =
let rec toList' lst acc =
match lst with
| ListEnd -> acc |> List.rev
| ListNode(v, rest) -> toList' rest (v :: acc)
toList' lst []
let countDuplicateNode (head: LinkedList) : (int * int) list =
let rec countDuplicateNode' head prev count acc =
match head with
| ListEnd -> ((prev, count) :: acc) |> List.rev
| ListNode (v, rest) ->
if v = prev then
countDuplicateNode' rest prev (count + 1) acc
else
countDuplicateNode' rest v 1 ((prev, count) :: acc)
match head with
| ListEnd -> []
| ListNode (v, rest) -> countDuplicateNode' rest v 1 []
let deleteDuplicates (head: LinkedList) : LinkedList =
let rec deleteDuplicates' notDups =
match notDups with
| [] -> ListEnd
| (v, _) :: rest -> ListNode(v, deleteDuplicates' rest)
let nonDups =
countDuplicateNode head
|> List.filter (fun (_, count) -> count = 1)
deleteDuplicates' nonDups