leetcode 234.回文链表
请判断一个链表是否为回文链表。
示例 1:
输入: 1->2
输出: false
示例 2:
输入: 1->2->2->1 输出: true
解题思路:
根据给出的示例找规律,可以看出回文链表就是,一个链表的前半部分和后半部分相等,而且长度不能是1,3,5...这种奇数,这样我们就可以将一个链表遍历,然后将其值存放在一个数组中,
最后对这个数组进行遍历看前半部分和后半部分是否相等。
正常解法:
var isPalindrome = function (head) {
let arr = []
while (head) {
arr.push(head.val)
head = head.next
}
if (arr.length % 2 !== 0) {
return false
} else {
for (var i = 0; i < arr.length/2; i++) {
if (arr[i] !== arr[arr.length -1-i]){
return false
}else {
return true
}
}
}
};
加入一个链表是 1,2,2,4
那么就是第一个和最后一个比较,第二个和倒数第二个比较。所以就是 arr[i] !== arr[arr.length -1-i]。
递归解法:
var isPalindrome = function (head, queue = []) {
if (!head) {
return true;
}
queue.push(head.val);
let flag = isPalindrome(head.next, queue);
return queue.shift() === head.val && flag;
}
https://www.javascriptcn.com/read-141395.html
不积跬步无以至千里