leetcode 234题

Posted by franki on January 12, 2022

leetcode 234题 回文链表

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

示例 1:

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

示例 2:

输入:head = [1,2]
输出:false
提示:
链表中节点数目在范围[1, 105] 内
0 <= Node.val <= 9

思路

使用数组记录链表中的元素,然后再用双指针遍历可以得出结果。

代码

function isPalindrome(head) {
    const arr = [];
    // 1. 将链表的元素复制到数组中
    while (head !== null) {
        arr.push(head.val);
        head = head.next;
    }

    // 2. 双指针来判断是否相等
    for (let i=0, j=arr.length-1; i<j; i++, j--) {
        if (arr[i] !== arr[j]) {
            return false;
        }
    }
    return true;
}

复杂度分析

  • 时间复杂度:O(N)
  • 空间复杂度:O(N)