(一)需要
今儿学的是双指针,思路感觉像小学数据A追B的追击问题似的。接下来是双指针的介绍
(二)双指针
1、为什么用双指针来判断链表是否成环?
- 快指针是能追上慢指针,能够缩小空间,就判断是否成环;
2、双指针的定义
- 快指针:步数大于等于2的挪动指针;
- 慢指针:步数为1的挪动指针;
-
链表中应用两个速度不同的指针时会遇到的状况:
如果没有环,快指针将停在链表的开端。
如果有环,快指针最终将与慢指针相遇。
给你一个链表的头节点 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…
发表回复