/* * function ListNode(x){ * this.val = x; * this.next = null; * } */ function isPail(head) { if (head === null || head.next === null) { return true } // 3.使用快慢指针 let fast = head, slow = head, current = head; // 遍历链表,移动快慢指针 while (fast.next !== null && fast.next.next !== null) { slow = slow.next; fast = fast.next.next; } // 此时当快指针移动到末端时,慢指针移动到中间,反转慢指针之后的链表 let reverseListHead = reverseList(slow); // 遍历链表,判断两个链表是否相等 while (current !== null && reverseListHead !== null) { if (current.val !== reverseListHead.val) { return false } current = current.next; reverseListHead = reverseListHead.next; } return true; } //反转链表 function reverseList(current) { let pre = null, curr = current; while (curr != null) { let nextNode = curr.next; curr.next = pre; pre = curr; curr = nextNode; } return pre; } module.exports = { isPail : isPail };