判断链表中是否有环

使用标识

通过判断当前的节点是否有我们添加上去的标识,如果有标识是环,并且是环的入口

function foo(head) {
  while(head) {
    if(head.flag) return true;
    head.flag = true;
    head = head.next;
  }
  return false;
}

使用JSON.strify

因为JSON.strify不能序列化含有循环引用的结构

function foo(head) {
  try {
    JSON.strify(head);
    return false;
  } catch (err) {
    return true;
  }
}

使用快慢指针

使用两个指针,快指针每次跳2,慢指针每次跳1,如果有环,最后快慢指针相同,如果没有环,快指针为空

function foo(head) {
  if(!head.next) return false;
  let fast = head.next.next;
  let slow = head.next;
  while(fast) {
    if(fast === slow) return true;
    fast = fast.next.next;
    slow = slow.next;
  }
  return false
}
posted @ 2023-01-03 17:12  卿六  阅读(25)  评论(0编辑  收藏  举报