[Algorithm] 234. Palindrome Linked List / Reverse linked list

Posted answer1215

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Algorithm] 234. Palindrome Linked List / Reverse linked list相关的知识,希望对你有一定的参考价值。

Given a singly linked list, determine if it is a palindrome.

Example 1:

Input: 1->2
Output: false

Example 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;
}

以上是关于[Algorithm] 234. Palindrome Linked List / Reverse linked list的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ2152:聪聪可可

hdu 2003 求绝对值

最全的Java笔试题库之选择题篇-总共234道181~234

234. Palindrome Linked List

JS语句 截取以逗号隔开的字符串 比如 我有一个“12,25,24,234,234,” 我想取出来单独12,25,24......,用JS

数据结构 - 学习笔记 - 红黑树前传——234树