题目描述1

代码

c++
java
python
#include <iostream>
using namespace std;

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) {
        // 设置虚拟头结点
        ListNode* dummyHead =  new ListNode(0);
        // 初始时,虚拟头结点 指向 实际链表的头结点
        dummyHead->next = head;
        // 当前操作的位置 指向 虚拟头结点,方便操作实际链表的头结点以及后面的节点
        ListNode* cur = dummyHead;
        /**开始遍历
         * 遍历终止的条件,分两种情况:
         * 偶数链表: cur->next = nullptr;
         * 奇数链表: cur->next->next = nullptr;
         */
         while (cur->next != nullptr && cur->next->next != nullptr) {
             // 临时节点保存要交换的节点.
             ListNode* tmp = cur->next;
             ListNode* tmp1 = cur->next->next->next;

             cur->next = cur->next->next;
             cur->next->next = tmp;
             cur->next->next->next = tmp1;

             cur = cur->next->next;
         }
         return dummyHead->next;
    }
};

int main() {
    Solution solution;
    ListNode ListNode7 = { 7,nullptr };
    ListNode ListNode6 = { 6,&ListNode7 };
    ListNode ListNode5 = { 5,&ListNode6 };
    ListNode ListNode4 = { 4,&ListNode5 };
    ListNode ListNode3 = { 3,&ListNode4 };
    ListNode ListNode2 = { 2,&ListNode3 };
    ListNode ListNode1 = { 1,&ListNode2 };
    ListNode* head = &ListNode1;
    ListNode* result = solution.swapPairs(head);
    while (result != nullptr) {
        cout << "result:" << result->val << endl;
        result = result->next;
    }
}

链接