翻转链表的一题 这里很多人刚开始思考的时候,拿起来就是直接反转整个链表,然后拿着整个链表与之前的相比,但是这里存在一个问题,反转整个链表会改变链表的结构,导致出错,这里只需要反转部分即可,利用快慢指针找出后半部分,然后进行反转,再进行比较即可
var isPalindrome = function (head) {
if (!head) return true
let slow = head, fast = head
let left = head
// 找到一半处
while (fast && fast.next) {
slow = slow.next
fast = fast.next.next
}
// 反转后半部分即可
let right = reverse(slow)
while (right) {
if (right.val !== left.val) return false
right = right.next
left = left.next
}
return true
}
var reverse = function (head) {
let pre = null, current = head
while (current) {
let nextNode = current.next
current.next = pre
pre = current
current = nextNode
}
return pre
}