zoukankan      html  css  js  c++  java
  • [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;
    }
  • 相关阅读:
    Java中的toString、equals方法覆写,懒汉式单例模式,及异常处理
    【Java】String类、Object类、包装类总结
    Java接口练习
    Java面向对象测试
    【Java】二叉搜索树的实现操作及应用
    【Java】实现二叉树基本操作、面试题
    SAS--宏变量
    SAS--array
    SAS--do loop until while
    SAS--设置行号、标记
  • 原文地址:https://www.cnblogs.com/Answer1215/p/12230145.html
Copyright © 2011-2022 走看看