주어진 LinkedList에서 순환이 있는지 찾는 문제였다.
하나씩 순차적으로 탐색하는 slowNode와 두개씩 탐색하는 fastNode를 선언했다.
순환이 없는 LinkedList의 특징은 탐색을 하다보면 언젠가 next가 nil이 된다.
while문으로 fastNode와 그 next가 null인지 체크한다.
slowNode와 fastNode가 만난다면 순환이 존재하는 것이다.
import java.util.*;
public class Solution {
public boolean hasCycle(ListNode head) {
ListNode slowNode = head;
ListNode fastNode = head;
while(fastNode != null && fastNode.next != null) {
slowNode = slowNode.next;
fastNode = fastNode.next.next;
if(slowNode == fastNode) {
return true;
}
}
return false;
}
}