回文链表-leetcode(234)

回文链表  回文链表-LeetCode(234)

请判断一个链表是否为回文链表

方法一

  1. 链表的值转换到数组中
  2. 将数组均分成俩个小数组
  3. 逆序其中一个数组,然后比较俩个数组对应下标的值是否相同
var isPalindrome = function(head) {
  var arr = []
  while (head) {
    arr.push(head.val)
    head = head.next
  }
  var len = arr.length
  var m = arr.length / 2
  var a1 = arr.splice(m)
  if (len % 2) {
   // 若数组长度为奇数,去除中间的数
    a1.shift()
  }
  return arr.reverse().join() === a1.join()
}

 

方法二

  1. 使用快慢指针找到链表中间的节点
  2. 把后半部分节点的值放入栈中
  3. 依次出栈,从头节点开始比较,直到栈为空或者值不相同
var isPalindrome = function (head) {
  var fast = head
  var slow = head
  var p = head
  if (!head || !head.next) {
      // 若链表为空或只有一个节点,则直接返回true
      return true
  }
  while (fast.next && fast.next.next) {
      fast = fast.next.next
      slow = slow.next
  }
  var stack = []
  slow = slow.next
  while (slow) {
      stack.push(slow.val)
      slow = slow.next
  }
  while (stack.length) {
      var n = stack.pop()
      if (n !== p.val) {
          return false
      }
      p = p.next
  }
  return true
}

 

posted on 2020-10-23 17:07  尘光  阅读(94)  评论(0)    收藏  举报

导航