LeetCode234. 回文链表
时间O(n)空间O(1)的方法
var isPalindrome = function(head) { let left = head; let right; let slow=head ;let fast = head; while(fast !==null && fast.next !== null) {
// 通过快慢指针找中点 fast = fast.next.next; slow = slow.next; } if(fast!==null) slow=slow.next; // 如果fast不等于null,说明链表是偶数,则slow需要再向下走一步 let reverse = function(h) { //迭代反转链表的方法 let nxt,cur = h; let pre = new ListNode(null); while(cur) { nxt = cur.next; cur.next = pre; pre = cur; cur = nxt; } return pre; } right = reverse(slow); // right等于反转后的slow while(right.next) { //如果right遍历完都相等的话就结束,因为left可能要比right的节点数多哦 if(left.val !== right.val) {// 让left的val和right的val依次进行比较,如果不相等则说明不是回文 return false; } left = left.next; right = right.next; } return true; };
浙公网安备 33010602011771号