本题来自leetcode141题——环形链表,题目如下:
题解代码如下:
bool hasCycle(struct ListNode *head) {
struct ListNode*fast = head;
struct ListNode*slow = head;
while(fast&&fast->next)
{
slow = slow->next;
fast = fast->next->next;
if(slow==fast)
{
return true;
}
}
return false;
}
环形链表的特性是无出口,也就是没有最后一个结点这个说法。
既然如此,我们可以利用这个特性,创建快慢指针遍历链表。由于链表中存在环形,快指针遍历下去一定能与慢指针相遇。就跟大学体测一样,总会有跑得慢的嘛,跑得快的就会追上最后一名,这样就是套圈,快慢指针相遇就是这个道理。
反之,如果链表不是环形链表,则会遍历到最后一个结点且下一个位置为空,这样就给循环的结束创建了条件,如果中途存在快慢指针相遇,则return即可。