Написано: 01.03.2023

24. Обмен парных узлов (Swap Nodes in Pairs)

medium

Задание.

Получен связанный список.

Нужно поменяйть местами каждые два соседних узла и вернуть его заголовок списка.

Нужно решить проблему, не изменяя значения в узлах списка (т.е. могут быть изменены только сами узлы).

Пример 1.

LeetCode-000024

Входные данные: head = [1,2,3,4]

Результат: [2,1,4,3]

Пример 2.

Входные данные: head = []

Результат: []

Пример 3.

Входные данные: head = [1]

Результат: [1]

Решение.

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        if(head == nullptr) return nullptr;
        if(head->next == nullptr) return head;
        ListNode *two = head->next, *tail = head->next->next;
        two->next = head;
        head->next = swapPairs(tail);
        return two;
    }
};