Junior — Middle
Hoe bepaal je de positie van een element dat zich in het midden van een gekoppelde lijst bevindt, en wat is de tijdcomplexiteit ervan?
sobes.tech AI
Antwoord van 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 — количество элементов в списке, так как мы проходим список один раз.