Перестановка соседних узлов в односвязном списке

Используйте фиктивный узел перед головой и меняйте ссылки каждой пары, не сами значения. После перестановки переходите к бывшему первому узлу пары; одиночный хвост останется нетронутым.

Короткий ответ

Что ответить на собеседовании

Используйте фиктивный узел перед головой и меняйте ссылки каждой пары, не сами значения. После перестановки переходите к бывшему первому узлу пары; одиночный хвост останется нетронутым.

Подробный разбор

Ответ с пояснениями

Условие

Дан односвязный список listHead. Требуется поменять местами каждый соседний узел, образуя пары, и вернуть указатель на новый первый элемент. Если количество узлов нечётное, последний элемент остаётся на месте.

Пример 1: Ввод: listHead = [1,2,3,4] Вывод: [2,1,4,3] Объяснение:

  • Пара (1,2) меняется местами → (2,1).
  • Пара (3,4) меняется местами → (4,3).
  • Итоговый список: [2,1,4,3].

Пример 2: Ввод: listHead = [1,2,3] Вывод: [2,1,3] Объяснение:

  • Пара (1,2) меняется местами → (2,1).
  • Оставшийся одиночный узел (3) остаётся без изменений.
  • Итоговый список: [2,1,3].

Пример 3: Ввод: listHead = [] Вывод: [] Объяснение: Пустой список остаётся пустым, так как нет узлов для перестановки.

Ответ

Используйте фиктивный узел перед головой и меняйте ссылки каждой пары, не сами значения. После перестановки переходите к бывшему первому узлу пары; одиночный хвост останется нетронутым.

Предполагается стандартный ListNode с полем next:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def swap_pairs(head):
    dummy = ListNode(next=head)
    previous = dummy
    while previous.next and previous.next.next:
        first = previous.next
        second = first.next
        first.next = second.next
        second.next = first
        previous.next = second
        previous = first
    return dummy.next

Для пустого списка возвращается None. Время O(n), дополнительная память O(1). Переставляются реальные узлы, что важно, если на них существуют внешние ссылки.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее