해당 문제는 자료형 중 Set
을 사용하여 풀이하면 쉬운 문제이다.
ListNode
를 Set
에 저장해두고, 입력 받았던 적이 있는 ListNode
라면, 순회하는 Cycle
이 존재한다는 의미이므로 해당 ListNode
를 반환하고 없다면 null
을 반환한다.
/**
* 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 detectCycle(head: ListNode | null): ListNode | null {
const set = new Set<ListNode>()
let current = head
while(current) {
if(set.has(current)) {
return current
}
set.add(current)
current = current.next
}
return null
};