Легкий
Проблема
Объедините два отсортированных связанных списка и верните его как новый список. Новый список должен быть составлен путем соединения узлов первых двух списков.
Пример:
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).