Back to questions
СБЕР Тех
Junior — Middle
70
Каким образом можно определить элемент, который находится на позиции, отступленной на k позиций от конца односвязного списка?
Companies where asked
Answer from AI
sobes.tech AI
Чтобы найти элемент, который находится на позиции, отступленной на k позиций от конца односвязного списка, можно использовать два указателя (двухуказательную технику):
- Инициализировать два указателя
fastиslowна начало списка. - Сдвинуть указатель
fastна k позиций вперед. - Затем одновременно сдвигать оба указателя (
fastиslow) по одному узлу, покаfastне достигнет конца списка. - В этот момент указатель
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;
}
Этот метод эффективен, так как требует только одного прохода по списку.