Skip to main content

234. 回文链表

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

示例 1:

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

示例 2:

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

答案

const head = {
'val':1,
'next':{
'val':2,
'next':{
'val':3,
'next':{
'val':3,
'next':{
'val':2,
'next':{
'val':1,
'next':{

}
}
}
}
}
}
}

思路:

  1. 声明数组 arr=[]
  2. 把链表的值存入数组
  3. 检查数组是否为回文 for 对撞指针:for (let i = 0, j = vals.length - 1; i < j; ++i, --j) {...}
  4. 判断条件:arr[i] !== arr[j]
var isPalindrome = function(head) {
// 1. 声明数组
const arr = [];

// 2. 把链表的值存入数组
while(head.next) {
arr.push(head.val);
head = head.next;
}
// 3. 检查数组是否为回文 对撞指针
for(let i = 0; i < arr.length / 2; i++ ){
const left = arr[i]
const right = arr[arr.length - i - 1]
if(left !== right) {
return false
}
}

return true;
};

console.log(isPalindrome(head))