leetcode-环形链表

211 阅读2分钟

环形链表的标题描述

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环;如果链表中存在环,则返回 true 。 否则,返回 false

示例1

截屏2021-11-29 下午3.18.34.png

输入: head = [3,2,0,-4], pos = 1
输出: true
解释: 链表中有一个环,其尾部连接到第二个节点。

提示:

  • 链表中节点的数目范围是 [0, 10的4次方]
  • 105 <= Node.val <= 105
  • pos 为 -1 或者链表中的一个 有效索引

下面就是代码呈现

var hasCycle = function(head){
 //上面提示说到数目范围是0-10的4次方,所以有可能是一个空链表对吧,空链表肯定也是没有环的,也是返回的false
 //所以我们这边需要做一个判断
 if(head === null || head.next === null) return false;
 //好,接下来我们就看看这道题怎么做
 //我们可以从头到尾的去遍历这个链表,遍历的过程中看看当前的这个节点有没有tag,如果没有我们就
 //给他标注上一个tag,然后遍历过程中遇到有tag就证明我们到达过这个节点,
 //我们又再次到达了这个节点,就说明我们的链表中是有环,相反我们如果一直没有遇到这个节点
 //就会走到链表的结尾指向null,就证明是没有环的
 let cur = head
 while(cur){
 //如果有tag就是有环返回true
   if(cur.tag) return true
   else{
   //如果没有我们随便赋一个值
     cur.tag = "a"
     // 依次向后遍历这个链表
     cur = cur.next
   }
 }
 return false
}