请判断一个链表是否为回文链表。
示例 1:

  1. 输入: 1->2
  2. 输出: false

题解

这题存在两种做法, 第一种比较简单,就是直接将链表转化为数组,求数组的回文,这个做法太多了,所以不讲了,只讲链表的回文

我们知道递归可以优先将链表到最底部,然后在进行回溯的一个操作,可以利用这个能力,设置加一个头结点,在将链表到最底部,然后将头结点向后走,而递归会不断向前走,这就形成了类似于数组的双指针的做法

let frontPointer;
const recursivelyCheck = (currentNode) => {
    if (currentNode !== null) {
        if (!recursivelyCheck(currentNode.next)) {
            return false;
        }
        if (currentNode.val !== frontPointer.val) {
            return false;
        }
        frontPointer = frontPointer.next;
    }
    return true;
}

var isPalindrome = function(head) {
    frontPointer = head;
    return recursivelyCheck(head);
};