题目链接
环形链表
题目描述
注意点
代码
public class Solution {
public boolean hasCycle(ListNode head) {
if(head == null || head.next == null){
return false;
}
ListNode low = head.next;
ListNode fast = head.next.next;
while(low != fast){
if(fast == null || fast.next == null){
return false;
}
low = low.next;
fast = fast.next.next;
}
return true;
}
}
关键点
- 最初使用的是用一个map存储链表中的结点,如果某个结点能在map中搜索到,则存在环形,缺点是速度不够快
- 参照题解采用快慢指针解决问题,快指针每次前进两步,慢指针每次前进一步,如果快指针反过来追到慢指针,则说明有环,否则没环。这种方法速度更快,并且所用空间很少
- 在遍历之前要先判断链表是否为空表以及链表中的元素是否多余一个,这种情况下不可能有环,同时防止后续遍历时空指针异常
|