LeetCode -- 141.环形链表

11/3/2022 环形链表

#

给你一个链表的头节点(head),判断链表中是否有环?

  • 有环 => 如果链表中某个节点可以通过连续next指针再次到达自身,则表示链表中存在环。
  • 存在环 => return true || false

#

# 思路1: 借助JS的Set数据结构的唯一性

MDN - Set (opens new window) => 允许存储任何类型的唯一值(原始值、对象引用)。Set里存储的是结点的引用指针,每个结点的内存地址是唯一的。

var hasCycle = function(head) {
  let set = new Set();
  // 遍历链表,判断链表某个节点是否出现多次
  while(head) {
    if(set.has(head)) {
      return true;
    }else {
      set.add(head)
    }
    head = head.next
  }
  return false
};
1
2
3
4
5
6
7
8
9
10
11
12
13

# 思路2: 设置快慢指针,如果存在环,两个指针最终一定会相遇

var hasCycle = function(head) {
  let slow = head
  let fast = head
  while(fast && fast.next) {
    slow = slow.next
    fast = fast.next.next
    if(slow === fast) return true
  }
  return false
};
1
2
3
4
5
6
7
8
9
10

# Try

环形链表 (opens new window)

Last Updated: 11/3/2022, 5:44:42 PM