算法列表

234.回文链表 简单

布莱克2026-02-17 11:15链表

问题:

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false

示例 1:

输入:head = [1,2,2,1]
输出:true

示例 2:

输入:head = [1,2]
输出:false

回答:

/**
 * @param {ListNode} head
 * @return {boolean}
 */
 //快慢指针从中间分隔链表,翻转后半部分链表,做比较
var isPalindrome = function(head) {
    let slow = head;
    let fast = head;
    while (fast.next && fast.next.next) {
        slow = slow.next;
        fast = fast.next.next;
    }
    let right = slow.next;
    slow.next = null;
    let prev = null;
    while (right) {
        let next = right.next;
        right.next = prev;
        prev = right;
        right = next;
    }
    while (prev) {
        if (head.val != prev.val) {
            return false;
        }
        head = head.next;
        prev = prev.next;
    }
    return true;
};


assistant