leetcode:141 环形链表
【摘要】
看下面的图在脑子里想一想.
题目解析:
/**
* Definition for singly-linked list.
* function ListNode(val) {
* ...
看下面的图在脑子里想一想.
题目解析:
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {boolean}
*/
var hasCycle = function(head) {
let p1=head;
let p2=head;
while(p1&&p2&&p2.next)
{
p1=p1.next;
p2=p2.next.next;
if(p1==p2)
{
return true;
}
}
return false;
};
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
思路;一快一慢两个指针在同一起点,快的走两步,慢的一步。
直到快的快慢的一圈正好形成一个圆圈就是环形链表了.
let p1=head;
let p2=head;
- 1
- 2
问题;
为什么都是head,因为在起点啊,还没有到达一公里呢。
为什么一个next,一个两个next呢?
因为一快一慢啊.
p1=p1.next;
p2=p2.next.next;
为什么if(p1==p2)
{
return true;
- 1
- 2
- 3
- 4
- 5
- 6
}呢?
因为已经形成一个圈了,已经快的快慢的一圈了.
为什么 while(p1&&p2&&p2.next)
?
p1&&p2代表p1与p2是不是都有值并且下面哪一个
p2.next代表从主要是判断有没有第一个节点的啊,是不是null。
条件是三个。
第一:必须p1与p2都有值,为什么,因为不这样不能相遇。
第二:p2.next必须有值,为什么,因为他如果没值,就代表不是环形链表了啊.
如果它有值,循环里面的p2.next.next;null没值,没关系啦,条件哪里的p2如果是null的话,也跳出循环啊.
完成.
文章来源: blog.csdn.net,作者:贵哥的编程之路(陈业贵),版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq_37805832/article/details/107526811
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)