leetcode-迴文鏈表

請判斷一個鏈表是否爲迴文鏈表。

示例 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;
    
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章