隣り合う2つのNodeを全て入れ替える問題です
下記はC++の実装例です
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode dummy_head(0, head);
ListNode* prev = &dummy_head;
while (prev->next != nullptr && prev->next->next != nullptr) {
ListNode* swap1 = prev->next;
ListNode* swap2 = swap1->next;
ListNode* after = swap2->next;
prev->next = swap2; // 1
swap2->next = swap1; // 2
swap1->next = after; // 3
prev = swap1;
}
return dummy_head.next;
}
};
dummyのNodeを使用しているのが1つポイントです。
図で理解するなら下記のイメージになります
以上です!