题意理解
判断一个链表中是否有环
问题分析
设计一个hash表,key为链表结点地址,value为结点位置(从1开始)。遍历链表,如果结点不在hash表中,存入结点地址和位置;如果在hash表中,说明有环。遍历结束,说明无环。
其他
空间复杂度0(1)的算法,设置两个指针,一个每次循环走两步,一个每次循环走一步,如果走两步的每一步到了结尾,返回无环;如果走两步的位置和走一步的位置相等,说明有环。可以看成是一个追击问题。
链接
bool hasCycle(ListNode *head) {
ListNode* fast=head,*slow=head;
while(fast && slow){
fast=fast->next;
if(!fast) return false;
fast=fast->next;
slow=slow->next;
if(fast==slow) return true;
}
return false;