Medium
Given a linked list, swap every two adjacent nodes and return its head. You must solve the problem without modifying the values in the list’s nodes (i.e., only nodes themselves may be changed.)
Example 1:
Input: head = [1,2,3,4]
Output: [2,1,4,3]
Example 2:
Input: head = []
Output: []
Example 3:
Input: head = [1]
Output: [1]
Constraints:
[0, 100]
.0 <= Node.val <= 100
# 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 swap_pairs(head :: ListNode.t() | nil) :: ListNode.t() | nil
def swap_pairs(nil), do: nil
def swap_pairs(head), do: swap_pairs(head, head.next)
def swap_pairs(head, nil), do: head
def swap_pairs(first, second) do
%ListNode{
second
| next: %ListNode{
first
| next:
unless second.next == nil do
swap_pairs(second.next, second.next.next)
else
nil
end
}
}
end
end