[LeetCode] 141. Linked List Cycle

Chobby·2025년 1월 20일
1

LeetCode

목록 보기
171/194

😎풀이

해당 문제는 노드를 순회하며 노드끼리 연결되어 있는지를 판별하는 문제이다.

난 직관적인 풀이를 선호하기에 slow, fast를 지정하지 않고 풀었지만 한번쯤 참고하면 효율성을 대폭 증가시킬 수 있는 좋은 풀이일 것 같다.

우선 나의 풀이는 다음과 같은 절차를 갖는다.

  1. Set을 통해 방문한 노드를 기록한다.
  2. 순회하며 방문했던 노드인지 판별한다.
/**
 * 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
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글