[LeetCode] 234. Palindrome Linked List

Chobby·2025년 2월 24일
1

LeetCode

목록 보기
250/427

😎풀이

  1. 중간 지점과 끝 지점에 노드를 위치시키기 위해 fastcur을 통해 각 2칸 및 1칸 전진시켜준다.
  2. 중간 지점이 된 cur부터 ListNode를 뒤집어준다.
  3. 시작 지점이 될 headstart변수로 정의하고 뒤집힌 cur을 통해 각 노드의 값을 비교하여 펠린드롬 여부를 확인한다.
function isPalindrome(head: ListNode | null): boolean {
    let fast = head
    let cur = head
    // 중간 지점, 끝 지점에 노드 위치
    while(fast.next && fast.next.next) {
        fast = fast.next.next
        cur = cur.next
    }
    // 중간 지점 이후 부분 뒤집기
    let prev = null
    while(cur) {
        const temp = cur.next
        cur.next = prev
        prev = cur
        cur = temp
    }
    // 비교하기
    let start = head
    while(start && prev) {
        if(start.val !== prev.val) return false
        start = start.next
        prev = prev.next
    }

    return true
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글