functionisPalindrome(head: ListNode | null): boolean { let left = head functiontraverse(right: ListNode | null) { if (right === null) returntrue let res = traverse(right.next) res = res && (left.val === right.val) left = left.next return res } returntraverse(head) }
functionisPalindrome(head: ListNode | null): boolean { let mid = findMid(head) let left = head let right = resverse(mid) let last = right let leftLast = null while(right != null) { if (left.val !== right.val) returnfalse leftLast = left left = left.next right = right.next } leftLast && (leftLast.next = resverse(last)) // 还原链表 returntrue }
functionfindMid(head: ListNode): ListNode { let slow = head, fast = head while(fast != null && fast.next != null) { slow = slow.next fast = fast.next.next } if (fast !== null) slow = slow.next return slow }
functionresverse(head: ListNode): ListNode { let pre = null let cur = head let next = null while(cur !== null) { next = cur.next cur.next = pre pre = cur cur = next } return pre }