Junior — Middle
Wie bestimmt man die Position eines Elements, das sich in der Mitte einer verketteten Liste befindet, und wie hoch ist seine zeitliche Komplexität?
sobes.tech KI
Antwort von 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 — количество элементов в списке, так как мы проходим список один раз.