> For the complete documentation index, see [llms.txt](https://maksimdan.gitbook.io/interview-practice-problems/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://maksimdan.gitbook.io/interview-practice-problems/leetcode_sessions/24_swap_nodes_in_pairs.md).

# 24 Swap Nodes in Pairs

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

```
For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.
```

Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.

**The Idea:** Swap the value of every two adjacent elements, while making sure to check for all instances of nullptr dereferences.

```cpp
void swapNode(ListNode *one, ListNode *two) {
    int temp = one->val;
    one->val = two->val;
    two->val = temp;
}

ListNode* swapPairs(ListNode* head) {
    // empty or single node list
    if (!head || !head->next) return head;

    ListNode *itr, *prev;
    itr = prev = head;

    while (itr->next) {
        swapNode(itr, itr->next);

        if (itr->next && itr->next->next) {
            itr = itr->next->next;
        }
        else break;
    }

    return head;
}
```
