前端算法-回文链表

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

题目

给你一个单链表的头节点 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
};


相关文章
|
30天前
|
算法
【C算法】链表算法
【C算法】链表算法
|
1月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
|
1月前
|
搜索推荐 前端开发 算法
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
|
23天前
|
JavaScript 算法 前端开发
"揭秘Vue.js的高效渲染秘诀:深度解析Diff算法如何让前端开发快人一步"
【8月更文挑战第20天】Vue.js是一款备受欢迎的前端框架,以其声明式的响应式数据绑定和组件化开发著称。在Vue中,Diff算法是核心之一,它高效计算虚拟DOM更新时所需的最小实际DOM变更,确保界面快速准确更新。算法通过比较新旧虚拟DOM树的同层级节点,递归检查子节点,并利用`key`属性优化列表更新。虽然存在局限性,如难以处理跨层级节点移动,但Diff算法仍是Vue高效更新机制的关键,帮助开发者构建高性能Web应用。
37 1
|
29天前
【刷题记录】链表的回文结构
【刷题记录】链表的回文结构
|
29天前
|
算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
|
1月前
|
数据采集 前端开发 算法
基于朴素贝叶斯算法的新闻类型预测,django框架开发,前端bootstrap,有爬虫有数据库
本文介绍了一个基于Django框架和朴素贝叶斯算法开发的新闻类型预测系统,该系统具备用户登录注册、后台管理、数据展示、新闻分类分布分析、新闻数量排名和新闻标题预测等功能,旨在提高新闻处理效率和个性化推荐服务。
|
24天前
|
存储 算法
【初阶数据结构篇】顺序表和链表算法题
此题可以先找到中间节点,然后把后半部分逆置,最近前后两部分一一比对,如果节点的值全部相同,则即为回文。
|
27天前
|
算法
【数据结构与算法】共享双向链表
【数据结构与算法】共享双向链表
10 0
|
27天前
|
算法
【数据结构与算法】双向链表
【数据结构与算法】双向链表
10 0