Given a linked list, swap every two adjacent nodes and return its head. You must solve the problem without modifying the values in the list's nodes (i.e., only nodes themselves may be changed.)

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

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

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

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

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

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

Условие

Given a linked list, swap every two adjacent nodes and return its head. You must solve the problem without modifying the values in the list's nodes (i.e., only nodes themselves may be changed.)

Example 1: Input: head = [1,2,3,4] Output: [2,1,4,3] Explanation:

Example 2: Input: head = [] Output: []

Example 3: Input: head = [1] Output: [1]

Example 4: Input: head = [1,2,3] Output: [2,1,3]

Ответ

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

function swapPairs(head) {
  const dummy = { next: head };
  let previous = dummy;
  while (previous.next && previous.next.next) {
    const first = previous.next;
    const second = first.next;
    first.next = second.next;
    second.next = first;
    previous.next = second;
    previous = first;
  }
  return dummy.next;
}

Здесь каждый узел имеет поле next, а конец списка равен null. Время O(n), дополнительная память O(1); список меняется на месте, пустой вход и один узел обрабатываются без особых ветвей.

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

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

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

Подробнее