Junior — Middle
Жалгыз байланышкан тизмедеги акыркы орундан k орунда турган элементти кантип аныктоого болот?
sobes.tech AI
AIден жооп
Жайылмалы тізбектегі соңынан орын алатын элементті табу үшін екі көрсеткішті (екі көрсеткіш техникасы) қолдануға болады:
- Екі көрсеткіш
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;
}
Бұл әдіс тиімді, себебі ол тек бір өтуді талап етеді.