LeetCode HOT 100 —— 234. 回文链表
链表
题目描述
给你一个单链表的头节点 head
,请你判断该链表是否为回文链表。如果是,返回 true
;否则,返回 false
。
进阶: 你能否用 O(n)
时间复杂度和 O(1)
空间复杂度解决此题?
解题思路
- 反转当前链表,迭代两个链表判断
- 链表后一半反转,然后从两端遍历
解题代码
// 反转链表
var reverseList = function(head) {
let pre = null
while(head) {
let next1 = head.next
head.next = pre
pre = head
head = next1
}
return pre
};
// 判断链表是否回文
var isPalindrome = function(head) {
let f = head, s = head
while(f && f.next) {
f = f.next.next
s = s.next
}
if(f) s = s.next
f = head
s = reverseList(s)
while(f && s) {
if(f.val != s.val) return false
f = f.next
s = s.next
}
return true
};