https://leetcode.cn/problems/swap-nodes-in-pairs/description/

<aside> 💡

这题没什么特别的思路,熟悉了链表基本操作后没有太大难度。注意一下循环的退出条件和交换顺序即可,交换顺序最好动手画个图捋一捋。

由于需要涉及对节点的操作(移动节点),所以需要设置虚拟头节点

</aside>

ListNode* swapPairs(ListNode* head) {
	ListNode* dummyHead = new ListNode();
	dummyHead->next = head;
	ListNode* left = dummyHead;
	ListNode* right = new ListNode();
	ListNode* temp = new ListNode();

	// 交换left->next和right->next
	// left节点后是空指针,或其后只有一个节点时退出
	while (left->next && left->next->next) {
		// 交换的是left->next与left->next->next(即left->next与right->next)
		right = left->next;
		temp = right->next->next;

		// 注意交换顺序,画个图会好理解一些
		left->next = right->next;
		right->next->next = right;
		right->next = temp;
		left = right;
	}

	head = dummyHead->next;
	delete dummyHead;
	return head;
}
ListNode* swapPairs(ListNode* head) {
    ListNode* dummyHead = new ListNode();
    dummyHead->next = head;

    ListNode* cur = dummyHead;
    ListNode* next1 = nullptr;
    ListNode* next2 = nullptr;

    while (cur->next && cur->next->next) {
        next1 = cur->next->next;
        next2 = next1->next;

        cur->next->next = next2;
        next1->next = cur->next;
        cur->next = next1;

        cur = next1->next;
    }
    head = dummyHead->next;
    delete dummyHead;
    return head;
}