用快慢指针判断链表是否带环:
1.定义指向head的fast、slow指针
2.fast每次走两步,slow每次走一步
3.如果链表带环,则fast与slow会在环内相遇;
如果链表不带环,则fast会指向NULL
代码如下:
延伸问题:
1.为什么在链表带环时fast和slow一定会在环中相遇?
2.slow每次走一步,fast每次一定要走两步吗,如果大于两步会怎么样?
3.fast和slow每次走的步数、环的长度以及slow入环时与fast的距离要满足怎样的条件?
环形链表
问题1:环形链表的概念以及判断方法
bool hasCycle(struct ListNode *head)
{
struct ListNode *fast=head, *slow=head;
while(fast && fast->next)
{
fast=fast->next->next;
slow=slow->next;
if(fast == slow)
return true;
}
return false;
}