思路转变过程:
思路1【失败】:找到最后一个数,它的值等于-1输出false,反之输出true。
问题:若存在环,会出现死循环,无法找到最后一个值
思路2【失败】:遍历链表,用每个节点的val来和对应索引的数值进行比较,相等输出true;反之输出false
问题:若存在环,会出现死循环
思路3【成功】:快慢指针,若存在环,由于速度差会最终是的快慢指针指向同一元素,输出true,反之若快指针在前进的过程中为NULL,则直接输出false。
收获
① 有关链表的遍历,首先判断表空
② 链表的结构造成了若出现环就不会有NULL——>快慢指针
bool hasCycle(struct ListNode* head ) {
if(head == NULL) return false; // 本能反应,要判断链表为空的极端条件
struct ListNode* fast,*slow;
fast = head;
slow = head;
fast = fast->next; // 先走一轮,才能开展下面的while循环判断
if(fast == NULL)
return false;
else
{
fast = fast->next;
if(fast == NULL)
return false;
else
slow = slow -> next;
}
while(fast != slow)
{
fast = fast->next;
if(fast == NULL)
return false;
else
{
fast = fast->next;
if(fast == NULL)
return false;
else
slow = slow -> next;
}
}
return true;
}
上述代码,即为本人所思考出的本题答案