前端算法-回文链表

简介: 前端算法-回文链表

题目

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

输入: head = [1,2,2,1]
输出: true

思路一

我们这里可以根据栈先进后出的特性来判断是否是回文链表,先声明一个stack变量,它是一个空栈,然后再声明一个cur变量,它指向当前的head形参,然后使用循环进行判断,当前的cur变量不为null则一直进行循环,然后将当前的cur变量通过push方法添加到stack栈中,然后将cur变量的值变为cur.next,然后再进行循环,这次判断的是head形参,如果形参不为null则一直进行循环,再循环中判断当前head的val属性和stack栈中的最后一个元素的val属性是否相等,如果不相等的情况下则直接返回false,如果相等则将head形参的值改为head.next,如果最后都没有返回false,则说明是回文链表,这个时候直接返回true即可

function isPalindrome(head) {
  const stack = [];
  let cur = head;
  while (cur !== null) {
    stack.push(cur);
    cur = cur.next;
  }
  while (head !== null) {
    if (head.val !== stack.pop().val) {
      return false;
    }
    head = head.next;
  }
  return true;
}

思路二

我们这里还可以使用快慢指针的方式进行实现,首先当前的head是否存在,如果不存在直接返回false即可,然后声明一个slow和fast变量,他们两个都指向head形参,然后再声明两个变量,分别是cur和pre变量,cur变量指向当前要反转的节点,pre变量指向cur变量的前一个节点,然后进行循环,通过循环去查找到中点,然后将当前节点指向前一个节点,前一个节点后移 ,当前节点后移,做出反转的操作,然后判断fast变量,当fast不为null时,说明链表长度为奇数,应该跳过中心节点,然后再使用循环,在循环中将pre变量指向反转链表的头, slow变量指向后半部分链表的头,在进行开始进行比较,如果不是回文链表的情况下则直接返回false,当循环执行完毕如果还没有返回false,则直接返回true

var isPalindrome = function(head) {
    if (!head) return false
    let slow = head, fast = head;
    let cur = head, pre = null;
    while (fast != null && fast.next != null) {
        fast = fast.next.next;
        slow = slow.next;
        cur.next = pre; 
        pre = cur;
        cur = slow; 
    }
    if (fast !== null){
         slow = slow.next
    }
    while (slow != null && pre != null) {
        if (slow.val !== pre.val) {
            return false
        }
        slow = slow.next;
        pre = pre.next;
    }
    return true
};


相关文章
|
5天前
|
移动开发 算法 前端开发
前端算法之堆排序
前端算法之堆排序
12 1
|
5天前
|
算法 前端开发
前端算法之快速排序
前端算法之快速排序
12 0
|
5天前
|
算法 前端开发 搜索推荐
前端算法之归并排序
前端算法之归并排序
10 0
|
2天前
|
存储 算法 Java
数据结构与算法 数组和链表
数据结构与算法 数组和链表
7 0
|
5天前
|
算法 前端开发
前端算法之基数排序
前端算法之基数排序
9 1
|
5天前
|
算法 前端开发 搜索推荐
前端算法之桶排序
前端算法之桶排序
6 1
|
5天前
|
存储 算法 前端开发
前端算法之计数排序
前端算法之计数排序
9 1
|
5天前
|
算法 前端开发 搜索推荐
前端算法之希尔排序
前端算法之希尔排序
4 0
|
5天前
|
算法 前端开发 搜索推荐
前端算法之插入排序
前端算法之插入排序
9 0
|
5天前
|
算法 前端开发 搜索推荐
前端算法之选择排序
前端算法之选择排序
9 0