Sobes.tech
Junior — Middle
78

Как определить позицию элемента, находящегося в середине связанного списка, и какова его временная сложность?

Компании, где спрашивали
OZONOZON

Ответ от нейросети

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 — количество элементов в списке, так как мы проходим список один раз.