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.

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;
}

Last updated