Day|Day 59/100 数据结构链表(2)——双指针判断是否链表成环

(一)需求 今儿学的是双指针,思路感觉像小学数据A追B的追击问题似的。接下来是双指针的介绍
(二)双指针 1、为什么用双指针来判断链表是否成环?

  • 快指针是能追上慢指针,可以减少空间,就判断是否成环;
2、双指针的定义
  • 快指针:步数大于等于2的移动指针;
  • 慢指针:步数为1的移动指针;
  • Day|Day 59/100 数据结构链表(2)——双指针判断是否链表成环
    文章图片

    链表中使用两个速度不同的指针时会遇到的情况:
  1. 如果没有环,快指针将停在链表的末尾。
  2. 如果有环,快指针最终将与慢指针相遇。
【Day|Day 59/100 数据结构链表(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...

    推荐阅读