24 - Swap Nodes In Pairs

#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]

expected unqualified-id:

造成這個問題的原因是,給變量命名時使用了數字開頭。我們應該牢記以下命名規則:

> **規則1**. 變量名只能由字母(a-z A-Z),數字(0-9),下劃線(_)的組合,例如:str_1。
> 
> **規則2**. 必須以字母或下劃線開頭,數字不能放在變量名首位,並且之間不能有空格。
> 
> **規則3**. 變量名不能使用編程語言的保留字。例如:if、else、int......
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        if ( head == NULL ) return NULL;
        else if ( head -> next == NULL ) return head;
        ListNode * node_1 = head -> next; // right side
        ListNode * node_2 = head; // left side
        ListNode * node_3 = NULL;
        ListNode * node_4 = NULL;
        head = node_1;
        while ( node_2 -> next != NULL ) {
            // 先判斷右邊有沒有第三與第四結點
            if ( node_1 -> next != NULL ) {
                if ( node_1 -> next -> next != NULL ) {
                    node_3 = node_1 -> next -> next;
                    node_4 = node_1 -> next;
                    node_1 -> next = node_2;
                    node_2 -> next = node_3;
                    node_1 = node_3;
                    node_2 = node_4;
                }  
                else {
                    node_3 = node_1 -> next;
                    node_1 -> next = node_2;
                    node_2 -> next = node_3;
                    node_2 = node_3;
                } 

            } 
            else {
                node_1 -> next = node_2;
                node_2 -> next = NULL;
            }

        }

        return head;
    }
};