
😎풀이
- 중간 지점과 끝 지점에 노드를 위치시키기 위해
fast
와 cur
을 통해 각 2칸 및 1칸 전진시켜준다.
- 중간 지점이 된
cur
부터 ListNode
를 뒤집어준다.
- 시작 지점이 될
head
를 start
변수로 정의하고 뒤집힌 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
};