zoukankan      html  css  js  c++  java
  • [LeetCode][JavaScript]Palindrome Linked List

    Palindrome Linked List

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

    Follow up:
    Could you do it in O(n) time and O(1) space?

    https://leetcode.com/problems/palindrome-linked-list/


    判断单链表是否为回文,要求时间复杂度O(n),空间复杂度O(1)。

    如果对空间复杂度没有要求,有两种简单的做法。

    一种是开个数组,把链表里的值挨个塞进去,然后双指针。

    还有一种是做一轮遍历,把单链表变成双链表(javasrcipt可以修改实例化的对象), 然后双指针。

    时间复杂度O(n),空间复杂度O(1)的解法:

    1.第一轮遍历用快慢指针(快指针每次走两步,慢指针每次走一步)寻找中点 -> O(n)

    2.反转后半段链表 -> O(n/2)

    3.比较 -> O(n/2)

    合起来时间还是O(n)。

    你确定这是easy?

     1 /**
     2  * Definition for singly-linked list.
     3  * function ListNode(val) {
     4  *     this.val = val;
     5  *     this.next = null;
     6  * }
     7  */
     8 /**
     9  * @param {ListNode} head
    10  * @return {boolean}
    11  */
    12 var isPalindrome = function(head) {
    13     //find middle
    14     var slow = head, fast = head, cacheHead = head;
    15     while(fast !== null && fast.next !== null){
    16         slow = slow.next;
    17         fast = fast.next.next;
    18     }
    19 
    20     //reverse link list
    21     var list2Head = new ListNode("head"), tmp;
    22     while(slow !== null){
    23         tmp = slow;
    24         slow = slow.next;
    25         tmp.next = list2Head.next;
    26         list2Head.next = tmp;
    27     }
    28 
    29     //judge palindrom
    30     var list1 = cacheHead, list2 = list2Head.next;
    31     for(; list2 !== null; list1 = list1.next, list2 = list2.next){
    32         if(list1.val !== list2.val){
    33             return false;
    34         }
    35     }
    36     return true;
    37 };
  • 相关阅读:
    快速幂模板
    部分有关素数的题
    POJ 3624 Charm Bracelet (01背包)
    51Nod 1085 背包问题 (01背包)
    POJ 1789 Truck History (Kruskal 最小生成树)
    HDU 1996 汉诺塔VI
    HDU 2511 汉诺塔X
    HDU 2175 汉诺塔IX (递推)
    HDU 2077 汉诺塔IV (递推)
    HDU 2064 汉诺塔III (递推)
  • 原文地址:https://www.cnblogs.com/Liok3187/p/4641048.html
Copyright © 2011-2022 走看看