leetcode:141 环形链表

举报
陈业贵 发表于 2021/12/14 22:20:50 2021/12/14
【摘要】 看下面的图在脑子里想一想. 题目解析: /** * 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。