题目描述:
解题思路:
这个题目在左神算法课上初级班讲解链表的课上就有讲如何判断一个链表是否有环,我自己总结的笔记在:https://blog.youkuaiyun.com/PnJgHT/article/details/120958609
笔记中有两种方法:一种是用哈希表,这个方法就是逻辑比较简单,把每个节点依次放进表中,如果有返回已存在的节点就是有环;但是因为题目的进阶要求是用O(1)的内存解决问题,所以就用到第二种方法:快慢指针。关于有环链表的数学特点在笔记中都有总结。下面是我得代码:
class Solution {
public boolean hasCycle(ListNode head) {
ListNode f,s;
f = head;
s = head;
if (head == null || head.next == null){
return false;
}
while (f != null && f.next!=null && f.next.next!=null){
f = f.next.next;
s = s.next;
if (f == s){
return true;
}
}
return false;
}
}
我在提交的时候遇到了几个问题:1、还是base case 问题没有考虑充分,对于小样本数据,比如只有一个或者两个或者空节点的情况的判断。2、是对于指针越界,没有考虑充分,会出现报错。
官方给出的题解基本也是上面的两种方法,这里就不贴代码了。