问题描述:
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
示例1:
输入:head = [1,2,2,1]
输出:true
解题思路:数组 + 双指针
- 定义一个数组arr,遍历链表,将其中的元素全部push到数组中
- 定义两个指针left, right, 一个从前向后遍历,一个从后向前遍历,比较arr[left]和arr[right]是否相等,如果不等,直接返回false
- 遍历结束,返回true
代码实现(js)
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {boolean}
*/
var isPalindrome = function(head) {
// 1.定义变量
let arr = []
// 2.遍历链表,将其中的元素推入arr数组中
while(head){
arr.push(head.val)
head = head.next
}
// 3.设置两个指针left, right, 一个向前,一个向后遍历数组arr
for(let left = 0,right = arr.length - 1; left <= right; left++,right--){
if(arr[left] !== arr[right]){
return false
}
}
return true
};