美文网首页程序员
leetcode-回文链表

leetcode-回文链表

作者: 8239e604d437 | 来源:发表于2018-12-19 09:23 被阅读0次

请判断一个链表是否为回文链表。

示例 1:

输入: 1->2
输出: false

示例 2:

输入: 1->2->2->1
输出: true

进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

代码

//查找单链表中点
function findMid(node){
    if(node === null){
        return null;
    }
    let midNode = node;
    node = node.next;
    while(node !== null && node.next !== null ){
        midNode = midNode.next
        node = node.next.next;
    }
    return midNode;
}

//翻转链表
var reverseList = function(head) {
    let prevNode = null;
    while(head !== null){
        //获取下一个节点
        let nextNode = head.next;
        head.next = prevNode;
        prevNode = head;
        head = nextNode;
    }
    return prevNode;
};


/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @return {boolean}
 */
var isPalindrome = function(head) {
    if(head === null){
        return null;
    }
    let midNode = findMid(head);
    midNode.next = reverseList(midNode.next);
    let n1 = head;
    let n2 = midNode.next;
    while(n1 !== null && n2 !== null && n1.val === n2.val ){
        n1 = n1.next;
        n2 = n2.next;
    }

    return n2 === null;
    
};

相关文章

网友评论

    本文标题:leetcode-回文链表

    本文链接:https://www.haomeiwen.com/subject/iisdkqtx.html