## Description

https://leetcode.com/problems/swap-nodes-in-pairs/

Given a linked list, swap every two adjacent nodes and return its head.

**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:**

- The number of nodes in the list is in the range
`[0, 100]`

. `0 <= Node.val <= 100`

**Follow up:** Can you solve the problem without modifying the values in the list’s nodes? (i.e., Only nodes themselves may be changed.)

## Explanation

We can resolve the problem with a recursive approach.

## Python Solution

```
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
return self.helper(head)
def helper(self, head):
if not head:
return head
if not head.next:
return head
dummy = ListNode(0)
dummy.next = head
third = head.next.next
dummy.next = head.next
head.next.next = head
head.next = self.helper(third)
return dummy.next
```

- Time Complexity: O(N)
- Space Complexity: O(N)

It is a best solution I found that very popular and helpful:

https://www.youtube.com/watch?v=4e7GMZwmNLg&ab_channel=EricProgramming