どうも、たくチャレ(@takuchalle)です。
LeetCode 24Swap Nodes in Pairs
を解きました。
与えられたListed Listを2要素ずつスワップしていく問題。val
を書き換えることは禁止で、ポインタのつけかえでのみ入れ替える必要があります。
まず、スワップするために必要な要素数に足りない場合は、そのまま返します。要素数が0
または1
の時がそれにあたります。
その後は2要素ごとにスワップしていきます。ポイントとしてはスワップする2要素だけが影響するのではなく、その前のノードのnext
も付け替える必要があるので、prev
変数で制御しています。
計算量はO(N)
で、消費メモリはO(1)
になります。
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if (head == nullptr) return nullptr;
if (head->next == nullptr) return head;
ListNode* p = head->next; // 戻り値用に保存しておく
ListNode* prev = nullptr;
for (ListNode* node = head; node != nullptr; node = node->next) {
if (node->next) {
ListNode* next = node->next;
node->next = next->next;
next->next = node;
if (prev != nullptr) {
prev->next = next;
}
prev = node;
}
}
return p;
}
};