Сложность: medium
Учитывая связанный список, поменяйте местами каждые два соседних узла и верните его голову. Вы должны решить проблему, не изменяя значения в узлах списка (т. е. изменять можно только сами узлы).
Пример:
Input: head = [1,2,3,4] Output: [2,1,4,3]
👨💻 Алгоритм:
1⃣Создаем фиктивный узел temp, указывающий на head, чтобы упростить работу с началом списка.
2⃣Пока существуют хотя бы два узла для обмена — выполняем перестановку указателей для соседней пары.
3⃣Продвигаем указатель к следующей паре.
😎 Решение:
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode *temp = (ListNode*)malloc(sizeof(ListNode));
temp->next = head;
ListNode *ptr = temp, *swap1, *swap2;
while(ptr->next && ptr->next->next) {
swap1 = ptr->next;
swap2 = ptr->next->next;
swap1->next = swap2->next;
swap2->next = swap1;
ptr->next = swap2;
ptr = swap1;
}
return temp->next;
}
};Ставь 👍 и забирай 📚 Базу знаний