Given a singly linked list, determine if it is a palindrome.
Example 1:
Input: 1->2 Output: falseExample 2:
Input: 1->2->2->1 Output: true
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {boolean}
*/
var isPalindrome = function(head) {
let slow = fast = head;
let stack = [];
while (fast && fast.next) {
stack.push(slow.val);
slow = slow.next;
fast = fast.next.next;
}
if (fast) {
slow = slow.next;
}
while (slow) {
val = stack.pop();
if (val !== slow.val) {
return false
}
slow = slow.next;
}
return true;
};
Follow up:
Could you do it in O(n) time and O(1) space?
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {boolean}
*/
var isPalindrome = function(head) {
let slow = fast = head;
while (fast && fast.next) {
slow = slow.next;
fast = fast.next.next;
}
slow = reverse(slow);
fast = head;
while (slow) {
if (slow.val !== fast.val) {
return false
}
slow = slow.next;
fast = fast.next;
}
return true;
}
var reverse = function (head) {
let prev = null;
while (head) {
let next = head.next;
head.next = prev;
prev = head;
head = next;
}
return prev;
}
来源:https://www.cnblogs.com/Answer1215/p/12230145.html