Легкий
Проблема
Объедините два отсортированных связанных списка и верните его как новый список. Новый список должен быть составлен путем соединения узлов первых двух списков.
Пример:
Input: 1->2->4, 1->3->4 Output: 1->1->2->3->4->4
Решение — итерация
Используйте два указателя для отслеживания двух списков. Сначала сравните l1
с l2
и определите указатели small
и large
. На каждой итерации мы будем использовать указатель tail
для поиска узла, значение которого больше large
в списке, в котором находится small
. И измените small
и large
в интерактивном режиме.
Сложность
Наконец, мы пройдем по каждому списку только один раз в этих двух циклах, поэтому временная сложность будет O(m+n), если m
и n
обозначают количество узлов в этих двух списках. .
Тривиально, что он использует только O(1) дополнительного пространства.
Решение — рекурсия
Выньте первый узел списка, который имеет меньшее значение головного узла, и рекурсивно вызовите себя для остальных двух списков.
Сложность
Понятно, что каждый вызов функции занимает всего O(1) времени и дополнительного места. И может потребоваться вызов функции O (m + n) раз для обхода всех узлов в l1
и l2
, если m
и n
обозначают количество узлов в двух списках. Таким образом, временная и пространственная сложность составляют O(m+n).