前端算法-回文链表

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

题目

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


相关文章
|
12月前
|
算法
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
182 1
|
6月前
|
存储 算法 物联网
解析局域网内控制电脑机制:基于 Go 语言链表算法的隐秘通信技术探究
数字化办公与物联网蓬勃发展的时代背景下,局域网内计算机控制已成为提升工作效率、达成设备协同管理的重要途径。无论是企业远程办公时的设备统一调度,还是智能家居系统中多设备间的联动控制,高效的数据传输与管理机制均构成实现局域网内计算机控制功能的核心要素。本文将深入探究 Go 语言中的链表数据结构,剖析其在局域网内计算机控制过程中,如何达成数据的有序存储与高效传输,并通过完整的 Go 语言代码示例展示其应用流程。
104 0
|
12月前
|
算法 索引
❤️算法笔记❤️-(每日一刷-141、环形链表)
❤️算法笔记❤️-(每日一刷-141、环形链表)
122 0
|
12月前
|
算法
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
129 0
|
12月前
|
算法
【❤️算法笔记❤️】-每日一刷-23、合并 K 个升序链表
【❤️算法笔记❤️】-每日一刷-23、合并 K 个升序链表
125 0
|
7月前
|
存储 监控 算法
员工电脑监控系统中的 C# 链表算法剖析-如何监控员工的电脑
当代企业管理体系中,员工电脑监控已成为一个具有重要研究价值与实践意义的关键议题。随着数字化办公模式的广泛普及,企业亟需确保员工对公司资源的合理利用,维护网络安全环境,并提升整体工作效率。有效的电脑监控手段对于企业实现这些目标具有不可忽视的作用,而这一过程离不开精妙的数据结构与算法作为技术支撑。本文旨在深入探究链表(Linked List)这一经典数据结构在员工电脑监控场景中的具体应用,并通过 C# 编程语言给出详尽的代码实现与解析。
105 5
|
8月前
|
存储 机器学习/深度学习 算法
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
200 30
|
8月前
|
存储 算法 C语言
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
313 25
|
8月前
|
存储 监控 算法
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
112 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
|
10月前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
674 5

热门文章

最新文章