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