Вам даны головы двух отсортированных связных списков list1 и list2 .
Объедините два списка в один отсортированный список. Список должен быть составлен путем сплетения (объединения) узлов первых двух списков.
Верните голову объединенного связного списка.
/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } *//** * @param {ListNode} list1 * @param {ListNode} list2 * @return {ListNode} */var mergeTwoLists = function(list1, list2) { // 1. Создаем фиктивный (dummy) узел. // Он нужен, чтобы упростить код и не обрабатывать отдельно случай создания "головы" нового списка. // Реальный результат начнется со следующего элемента (dummy.next). const dummy = new ListNode(0); // 2. Указатель current будет перемещаться и строить список. // Изначально он указывает на dummy. let current = dummy; // 3. Пока в обоих списках есть элементы... while (list1 !== null && list2 !== null) { // Сравниваем значения текущих узлов двух списков if (list1.val <= list2.val) { // Если значение в list1 меньше или равно, присоединяем узел из list1 current.next = list1; // Передвигаем указатель list1 вперед list1 = list1.next; } else { // Иначе присоединяем узел из list2 current.next = list2; // Передвигаем указатель list2 вперед list2 = list2.next; } // Передвигаем наш указатель current вперед, так как мы только что добавили узел current = current.next; } // 4. После цикла один из списков может быть еще не пуст. // Так как списки уже отсортированы, мы просто прицепляем остаток к концу нашего списка. if (list1 !== null) { current.next = list1; } else if (list2 !== null) { current.next = list2; } // 5. Возвращаем начало собранного списка (пропуская фиктивный узел). return dummy.next;};