Junior — Middle
78
Как определить позицию элемента, находящегося в середине связанного списка, и какова его временная сложность?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Чтобы найти элемент, находящийся в середине связанного списка, можно использовать два указателя: медленный (slow) и быстрый (fast). Идея в том, что быстрый указатель двигается по списку с шагом 2, а медленный — с шагом 1. Когда быстрый указатель достигает конца списка, медленный будет указывать на средний элемент.
Пример на Java:
class Node {
int data;
Node next;
Node(int data) { this.data = data; }
}
public Node findMiddle(Node head) {
Node slow = head;
Node fast = head;
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
}
return slow; // slow указывает на средний элемент
}
Временная сложность этого алгоритма — O(n), где n — количество элементов в списке, так как мы проходим список один раз.