思路:想象一下操场上两个人同时出发,一个人跑得快,一个人跑得慢,两人会再相遇【操场是个环】,不相遇则不存在环。快慢指针
public class Solution {
public boolean hasCycle(ListNode head) {
ListNode fast=head;
ListNode slow=head;
while(fast!=null&&fast.next!=null)
{
fast=fast.next.next;
slow=slow.next;
if(fast==slow)
{
return true;
}
}
return false;
}
}
你可能会在前面做个边界判断,比如链表为空或者不超过两个节点,此时不存在环。然后你发现下面其实已经做了判断。好的程序是不断优化出来的,不是一蹴而就的