Sobes.tech
Junior — Middle

Жалгыз байланышкан тизмедеги акыркы орундан k орунда турган элементти кантип аныктоого болот?

sobes.tech AI

AIден жооп

Жайылмалы тізбектегі соңынан орын алатын элементті табу үшін екі көрсеткішті (екі көрсеткіш техникасы) қолдануға болады:

  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;
}

Бұл әдіс тиімді, себебі ол тек бір өтуді талап етеді.