Sobes.tech
Junior — Middle

Como pode determinar-se o elemento que está numa posição k do final de uma lista ligada simples?

sobes.tech IA

Resposta da IA

Para encontrar o elemento que está numa posição, deslocada por k posições a partir do final de uma lista ligada simples, pode usar dois ponteiros (técnica de dois ponteiros):

  1. Inicialize dois ponteiros fast e slow no início da lista.
  2. Avance o ponteiro fast k posições para frente.
  3. Depois, mova simultaneamente ambos os ponteiros (fast e slow) uma posição de cada vez, até que fast alcance o final da lista.
  4. Nesse momento, o ponteiro slow apontará para o elemento desejado.

Exemplo em 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 maior que o comprimento da lista
        fast = fast.Next;
    }
    
    while (fast != null) {
        fast = fast.Next;
        slow = slow.Next;
    }
    
    return slow;
}

Este método é eficiente, pois requer apenas uma passagem pela lista.