【Botão Forçar】 141. Lista encadeada de anéis
Dê a você o nó principal de uma lista encadeada e julgue se há um anel na lista encadeada.
Se houver um nó na lista encadeada que pode ser alcançado novamente rastreando continuamente o próximo ponteiro, haverá um ciclo na lista encadeada. Para representar o anel na lista encadeada fornecida, o sistema de avaliação usa internamente o inteiro pos para indicar a posição em que o final da lista encadeada está conectado à lista encadeada (o índice começa em 0). Nota: pos não é passado como parâmetro. Apenas para identificar a situação real da lista encadeada.
Retorna verdadeiro se houver um ciclo na lista encadeada. Caso contrário, retorna falso.
Exemplo 1:
Entrada : cabeça = [3,2,0,-4], pos = 1
Saída : verdadeiro
Explicação : Há um anel na lista encadeada cuja cauda está conectada ao segundo nó.
Exemplo 2:
Entrada : cabeça = [1,2], pos = 0
Saída : verdadeiro
Explicação : Há um anel na lista encadeada cuja cauda está conectada ao primeiro nó.
Exemplo 3:
Entrada : cabeça = [1], pos = -1
Saída : falso
Explicação : Não há ciclo na lista encadeada.
Dica:
O intervalo do número de nós na lista encadeada é [0, 1 0 4 10^41 04 ]
-1 0 5 10^51 05 <= Node.val <=1 0 5 10^51 05
pos é -1 ou um índice válido na lista encadeada.
responder
ponteiro de velocidade
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public class Solution {
public boolean hasCycle(ListNode head) {
//没有链表
if (head == null) {
return false;
}
ListNode slow = head;
ListNode fast = head;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
//快慢指针重合
if (slow == fast) {
return true;
}
}
return false;
}
}