234. Palindrome Linked List

Bas·2022년 8월 15일
0

Leetcode

목록 보기
6/11

linked-list가 회문이면 true, 아니면 false를 반환.
(좌우대칭?)

fast slow pointer를 이용해서 가운데 값을 알 수 있다.
그럼 마지막 포인터에서 거꾸로 가운데 값을 향해서 오면서 계속 같으면 회문이라 볼 수 있고 true를 반환한다.

// * 가운데를 중심으로 나눠서 뒤에 있는 linked-list를 revers 함수를 이용해 같은지 확인.
const reverseList = (head) => {
    let cur = head;
    let prev = null;
    let next;
    
    while (cur) {
        next = cur.next;
        cur.next = prev;
        prev = cur;
        cur = next;
    }
    return prev;
}

// * Main
const isPalindrome = (head) => {
    let fast = head;
    let slow = head;
    let startPointer = head;
    let length = 0;
    
    while (fast && fast.next) {
        fast = fast.next.next;
        slow = slow.next;
        length++;
    }
    
    let mid = reverseList(slow);
    
    while(length) {
        length--;
        if (mid.val !== startPointer.val) return false;
        mid = mid.next;
        startPointer = startPointer.next;
        
    }
    
    return true;
};

https://www.youtube.com/watch?v=X2R2VZjKqi8

profile
바스버거

0개의 댓글