判断链表是否有环?:
https://leetcode-cn.com/problems/linked-list-cycle/
题目描述:
代码实现:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
bool hasCycle(struct ListNode *head) {
//快慢指针法:
//判断是否为空链表
if(head == NULL)
return false;
struct ListNode* slow = head;
struct ListNode* fast = head;
//只要有环,那下面两个指针指向同意一个位置的时候,就可以跳出循环,所以这里的条件只需要判断没有环的借宿情况即可
while(fast != NULL && fast->next != NULL)
{
slow = slow->next;
fast = fast->next->next;
if(slow == fast)
return true;
}
return false;
}
对代码段进行画图解释:
做到这里,我们应该开始思考几个问题:
对于第一个问题:
对于第二个问题:
第三个问题的分析思路和上面两个问题的一样。