Sobes.tech
Back to questions
Junior — Middle
70

Каким образом можно определить элемент, который находится на позиции, отступленной на k позиций от конца односвязного списка?

Companies where asked
СБЕР ТехСБЕР Тех

Answer from AI

sobes.tech AI

Чтобы найти элемент, который находится на позиции, отступленной на k позиций от конца односвязного списка, можно использовать два указателя (двухуказательную технику):

  1. Инициализировать два указателя fast и slow на начало списка.
  2. Сдвинуть указатель fast на k позиций вперед.
  3. Затем одновременно сдвигать оба указателя (fast и slow) по одному узлу, пока fast не достигнет конца списка.
  4. В этот момент указатель slow будет указывать на нужный элемент.

Пример на C#:

class Node {
    public int Value;
    public Node Next;
}

Node FindKthFromEnd(Node head, int k) {
    Node fast = head;
    Node slow = head;
    
    for (int i = 0; i < k; i++) {
        if (fast == null) return null; // k больше длины списка
        fast = fast.Next;
    }
    
    while (fast != null) {
        fast = fast.Next;
        slow = slow.Next;
    }
    
    return slow;
}

Этот метод эффективен, так как требует только одного прохода по списку.