Наилучший возможный алгоритм для проверки, объединяются ли два связанных списка в какой-либо момент?Если да, то где?[дубликат]
-
22-07-2019 - |
Вопрос
Возможный Дубликат:
Связанный список вопросов для интервью
Это вопрос для интервью, на который у меня нет ответа.Учитывая Два списка, вы не можете изменить список и не знаете его длину.Дайте наилучший возможный алгоритм для:
- Проверьте, не сливаются ли два списка в какой-либо момент?
- Если происходит слияние, то в какой момент они сливаются?
- Если я позволю вам изменить список, как бы вы изменили свой алгоритм?
Решение
Я предполагаю, что мы говорим о простых связанных списках, и мы можем безопасно создать хэш-таблицу указателей элементов списка.
Q1:Выполните итерацию до конца обоих списков, если соответствующие последние элементы совпадают, списки в какой-то момент объединятся.
Сложность - O(N)
, пространственная сложность - O(1)
Q2:
- Поместите все элементы одного списка в хэш-таблицу
- Выполните итерацию по 2-му списку, проверяя хэш-таблицу для каждого элемента списка.Первое попадание (если таковое имеется) - это точка слияния, и у нас есть позиция во 2-м списке.
- Чтобы получить позицию в 1-м списке, снова выполните итерацию по первому списку в поисках элемента, найденного на предыдущем шаге.
Временная сложность - O(N)
.Космическая сложность - O(N)
Q3:
- Как Q1, но также измените направление указателей списка на обратное.
- Затем выполните итерацию по перевернутым спискам в поисках последнего общего элемента - то есть точки слияния - и восстановите список в исходном порядке.
Временная сложность - O(N)
.Космическая сложность - O(1)
Другие советы
Номер 1: просто итерируйте оба, а затем проверьте, заканчиваются ли они одним и тем же элементом. Это O (n), и он не может быть побежден (поскольку это может быть последний элемент, который является общим, и попадание туда всегда занимает O (n)).
Обходите список и найдите глобальную переменную для поиска числа обнаруженных NULL
. Если в какой-то момент они объединятся, будет только 1 NULL
, в противном случае будет два NULL
.