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':{
}
}
}
}
}
}
}
思路:
- 声明数组 arr=[]
- 把链表的值存入数组
- 检查数组是否为回文
for 对撞指针:
for (let i = 0, j = vals.length - 1; i < j; ++i, --j) {...}
- 判断条件:
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))