LeetCode HOT 100 —— 234. 回文链表

163 阅读1分钟

LeetCode HOT 100 —— 234. 回文链表

链表

题目描述

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false

image.png

进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

解题思路

  1. 反转当前链表,迭代两个链表判断
  2. 链表后一半反转,然后从两端遍历

解题代码

// 反转链表
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
};