环,可以联想到操场跑步。两个人同时同地出发,当跑得快的人第一次追上跑的慢的人,快的人一定比慢的人多跑一圈
解题方法:快慢指针
```js
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var detectCycle = function(head) {
let fast = head
let slow = head
let hasCycle = false
while(fast && fast.next){
fast = fast.next.next
slow = slow.next
if(fast == slow){
hasCycle = true
break
}
}
if(hasCycle){
fast = head
while(fast != slow){
fast = fast.next
slow = slow.next
}
}
return hasCycle? slow:null
};
```
总结一下我之前存在的问题:
1.指针移动语法:fast = fast.next.next,而非数字加法:fast +=2
2.第二个循环条件:fast != slow,而非:fast == slow
3.无环情况的特殊处理
关联知识:js对象比较 == 和 === 完全等价
在 JavaScript 中比较两个对象,比较的是它们的内存地址(引用)