前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode:141 环形链表

leetcode:141 环形链表

作者头像
贵哥的编程之路
发布2020-10-28 15:27:33
2760
发布2020-10-28 15:27:33
举报
文章被收录于专栏:用户7873631的专栏
在这里插入图片描述
在这里插入图片描述

看下面的图在脑子里想一想.

题目解析:

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
/**
 * 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;
};

思路;一快一慢两个指针在同一起点,快的走两步,慢的一步。 直到快的快慢的一圈正好形成一个圆圈就是环形链表了.

代码语言:javascript
复制
 let p1=head;
    let p2=head;

问题; 为什么都是head,因为在起点啊,还没有到达一公里呢。 为什么一个next,一个两个next呢? 因为一快一慢啊.

代码语言:javascript
复制
 p1=p1.next;
 p2=p2.next.next;
 为什么if(p1==p2)
        {
            return true;

}呢? 因为已经形成一个圈了,已经快的快慢的一圈了. 为什么 while(p1&&p2&&p2.next)? p1&&p2代表p1与p2是不是都有值并且下面哪一个 p2.next代表从主要是判断有没有第一个节点的啊,是不是null。 条件是三个。 第一:必须p1与p2都有值,为什么,因为不这样不能相遇。 第二:p2.next必须有值,为什么,因为他如果没值,就代表不是环形链表了啊. 如果它有值,循环里面的p2.next.next;null没值,没关系啦,条件哪里的p2如果是null的话,也跳出循环啊. 完成.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档