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):
- Inicialize dois ponteiros
fasteslowno início da lista. - Avance o ponteiro
fastk posições para frente. - Depois, mova simultaneamente ambos os ponteiros (
fasteslow) uma posição de cada vez, até quefastalcance o final da lista. - Nesse momento, o ponteiro
slowapontará 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.