Skip to content

Instantly share code, notes, and snippets.

@maxx-coffee
Created January 6, 2022 03:35
Show Gist options
  • Save maxx-coffee/724045e3a313984094c11a1f51e6234f to your computer and use it in GitHub Desktop.
Save maxx-coffee/724045e3a313984094c11a1f51e6234f to your computer and use it in GitHub Desktop.
#pattern matching
# Definition for singly-linked list.
#
# defmodule ListNode do
# @type t :: %__MODULE__{
# val: integer,
# next: ListNode.t() | nil
# }
# defstruct val: 0, next: nil
# end
defmodule Solution do
@spec merge_two_lists(list1 :: ListNode.t | nil, list2 :: ListNode.t | nil) :: ListNode.t | nil
def merge_two_lists(nil, second), do: second
def merge_two_lists(first, nil), do: first
def merge_two_lists(%{val: val1, next: next1} = first_list, %{val: val2, next: next2} = second_list) when val1 <= val2 do
%ListNode{val: val1, next: merge_two_lists(first_list.next, second_list)}
end
def merge_two_lists(%{val: val1, next: next1} = first_list, %{val: val2, next: next2} = second_list) do
%ListNode{val: val2, next: merge_two_lists(first_list, second_list.next)}
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment