您当前的位置: 首页 >  leetcode

暂无认证

  • 3浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

leetcode:141 环形链表

发布时间:2020-07-23 01:22:46 ,浏览量: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 p1=head; let p2=head; while(p1&&p2&&p2.next) { p1=p1.next; p2=p2.next.next; if(p1==p2) { return true; } } return false; }; 

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

let p1=head; let p2=head; 

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

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的话,也跳出循环啊. 完成.

关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

0.0519s