- 😣 第一次练习 2020年3月9日
- 💩 第二次练习 2020年3月11日 也不是很难,不过为啥就是做错了呢?还是要多加练习才行。
- 🙄 第三次练习 2020年3月12日 边界,错误判断还是需要的,不然很容易出错
- 😭 第四次练习 2020年3月17日 💩我丢... 太不仔细了。while 都能写成 if
# 快慢指针
TIP
以前做过这个题,思路还是记得住, 不过有点不会写了 😏
2020年3月9日17:52:41
/**
* @param {ListNode} head
* @return {boolean}
*/
var hasCycle = function(head) {
// 快慢指针
if (head == null || head.next == null)
return false;
let slow = head, fast = head.next;
while (slow != fast) {
if (fast == null || fast.next == null)
return false;
slow = slow.next;
fast = fast.next.next;
}
return true;
};
利用 JSON.stringify() 不能字符串化循环引用的特性,不过速度比较慢
2020年3月9日17:59:00
/**
* @param {ListNode} head
* @return {boolean}
*/
var hasCycle = function(head) {
// 利用 JSON.stringfiy()
try {
JSON.stringify(head);
return false;
} catch(err) {
return true;
}
};
# 易错点
- 以是否相等
slow != fast
作为结束条件,而不是以是否还有下一个元素作为结束条件fast.next != null && fast.next.next != null
- 需要判断链表为空或者链表只有一个元素的情况。需要特殊处理一下