判断链表中是否又环使用JavaScript解决算法问题

简介: 判断链表中是否又环使用JavaScript解决算法问题

判断链表中是否有环


判断给定的链表中是否有环。如果有环则返回true,否则返回false。

输入分为两部分,第一部分为链表,第二部分代表是否有环,然后将组成的head头结点传入到函数里面。-1代表无环,其它的数字代表有环,这些参数解释仅仅是为了方便读者自测调试。实际在编程时读入的是链表的头节点。

例如输入{3,2,0,-4},1时,对应的链表结构如下图所示:


image.png


示例1

输入:{3,2,0,-4},1

返回值:true

说明:第一部分{3,2,0,-4}代表一个链表,第二部分的1表示,-4到位置1(注:头结点为位置0),即-4->2存在一个链接,组成传入的head为一个带环的链表,返回true


解题思路


我们链表的每一个节点只有一个val值和一个next指针,也就是说一个节点只能有一个指针指向下一个节点,不能有两个指针,那这时我们就可以说一个性质:环形链表的环一定在末尾,末尾没有NULL了

因此环后面不可能还有一条尾巴。如果是普通线形链表末尾一定有NULL,那我们可以根据链表中是否有NULL判断是不是有环。但是如果是环形链表就会一直找不到NULL。所以我们可以把每一个值存入set中,如果出现重复的则就证明是环形链表

具体步骤如下

  • step1:初始化一个set数据结构
  • step2:如果当前节点不是null,则进入循环
  • step3: 判断当前节点是不是在set中,如果是则就证明是环形链表,返回true
  • step4: 将当前节点添加入set中
  • step5: 如果跳出循环则证明不是环形链表,返回false
function hasCycle( head ) {
    // write code here
    let set = new Set()
    while(head){
        if(set.has(head)){
            return true
        }
        set.add(head)
        head = head.next
    }
    return false
}



目录
相关文章
|
30天前
|
JavaScript 算法 前端开发
JS算法必备之String常用操作方法
这篇文章详细介绍了JavaScript中字符串的基本操作,包括创建字符串、访问特定字符、字符串的拼接、位置查找、大小写转换、模式匹配、以及字符串的迭代和格式化等方法。
JS算法必备之String常用操作方法
|
30天前
|
JavaScript 算法 前端开发
JS算法必备之Array常用操作方法
这篇文章详细介绍了JavaScript中数组的创建、检测、转换、排序、操作方法以及迭代方法等,提供了数组操作的全面指南。
JS算法必备之Array常用操作方法
|
1月前
|
JavaScript 算法 前端开发
"揭秘Vue.js的高效渲染秘诀:深度解析Diff算法如何让前端开发快人一步"
【8月更文挑战第20天】Vue.js是一款备受欢迎的前端框架,以其声明式的响应式数据绑定和组件化开发著称。在Vue中,Diff算法是核心之一,它高效计算虚拟DOM更新时所需的最小实际DOM变更,确保界面快速准确更新。算法通过比较新旧虚拟DOM树的同层级节点,递归检查子节点,并利用`key`属性优化列表更新。虽然存在局限性,如难以处理跨层级节点移动,但Diff算法仍是Vue高效更新机制的关键,帮助开发者构建高性能Web应用。
47 1
|
1月前
|
算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
|
1月前
|
存储 算法
【初阶数据结构篇】顺序表和链表算法题
此题可以先找到中间节点,然后把后半部分逆置,最近前后两部分一一比对,如果节点的值全部相同,则即为回文。
|
1月前
|
算法
【数据结构与算法】共享双向链表
【数据结构与算法】共享双向链表
13 0
|
1月前
|
算法
【数据结构与算法】双向链表
【数据结构与算法】双向链表
11 0
|
1月前
|
算法
【数据结构与算法】循环链表
【数据结构与算法】循环链表
13 0
|
1月前
|
存储 算法
【数据结构与算法】链表
【数据结构与算法】链表
18 0
|
1月前
|
算法
【C算法】链表算法
【C算法】链表算法