해당 문제는 노드를 순회하며 노드끼리 연결되어 있는지를 판별하는 문제이다.
난 직관적인 풀이를 선호하기에 slow
, fast
를 지정하지 않고 풀었지만 한번쯤 참고하면 효율성을 대폭 증가시킬 수 있는 좋은 풀이일 것 같다.
우선 나의 풀이는 다음과 같은 절차를 갖는다.
Set
을 통해 방문한 노드를 기록한다./**
* Definition for singly-linked list.
* class ListNode {
* val: number
* next: ListNode | null
* constructor(val?: number, next?: ListNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
* }
*/
function hasCycle(head: ListNode | null): boolean {
// 현재 노드를 head로 지정
let current = head
// 방문 기록을 저장할 Set
const visited = new Set<ListNode>()
// head 순회
while(current) {
// 이미 탐색된 노드라면 true 반환
if(visited.has(current)) return true
visited.add(current)
current = current.next
}
// 노드가 연결되지 않은 경우로 false 반환
return false
};