Я слышал этот точный вопрос как вопрос викторины.
Самое элегантное решение:
Поместите оба указателя на первый элемент (назовите их A и B)
Тогда продолжайте цикл ::
- Переход A к следующему элементу
- Переходите к следующему элементу снова
- Переход B к следующему элементу
Каждый раз, когда вы обновляете указатель, проверьте, идентичны ли A и B.
Если в какой-то момент указатели A и B идентичны, то у вас есть цикл.
Проблема с этим подходом состоит в том, что вы можете в конечном итоге перемещаться по циклу дважды, но не более, чем дважды с указателем A
Если вы действительно хотите найти элемент, на который указывают два указателя, это более сложно. Я бы вышел из состояния конечности и сказал бы, что это невозможно сделать только с двумя указателями, если вы не хотите повторять повторение следующего связанного списка.
Наиболее эффективный способ сделать это с большей памятью - это поместить указатели на элементы в массиве, отсортировать их, а затем искать повтор.