关于javascript:Day-59100-数据结构链表2双指针判断是否链表成环

30次阅读

共计 792 个字符,预计需要花费 2 分钟才能阅读完成。

(一)需要

今儿学的是双指针,思路感觉像小学数据 A 追 B 的追击问题似的。接下来是双指针的介绍

(二)双指针

1、为什么用双指针来判断链表是否成环?

  • 快指针是能追上慢指针,能够缩小空间,就判断是否成环;

2、双指针的定义

  • 快指针:步数大于等于 2 的挪动指针;
  • 慢指针:步数为 1 的挪动指针;
  • 链表中应用两个速度不同的指针时会遇到的状况:

  1. 如果没有环,快指针将停在链表的开端。
  2. 如果有环,快指针最终将与慢指针相遇。

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

如果链表中有某个节点,能够通过间断跟踪 next 指针再次达到,则链表中存在环。为了示意给定链表中的环,评测零碎外部应用整数 pos 来示意链表尾连贯到链表中的地位(索引从 0 开始)。留神:pos 不作为参数进行传递。仅仅是为了标识链表的理论状况。

如果链表中存在环,则返回 true。否则,返回 false。

3、如何实现

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */

/**
 * @param {ListNode} head
 * @return {boolean}
 */
var hasCycle = function(head) {
  // 快指针初始化
  let fast=head
  // 慢指针初始化,终点统一
  let slow=head
  while(fast && fast.next){
    fast = fast.next.next // 走 2 步
    slow = slow.next // 走 1 步
    if(fast == slow){return true;}
  }
  return false
};

以上

参考链接

Leecode

https://leetcode-cn.com/leetb…

写在最初的话

学习路上,经常会懈怠

《有想学技术须要监督的同学嘛~》
https://mp.weixin.qq.com/s/Fy…

正文完
 0