Leecode之环形链表
一.题目及剖析
https://leetcode.cn/problems/linked-list-cycle/description/
这道题就是去判断一个链表是否带环,分两种情况,链表中只有一个元素则一定不带环,链表中有两个及以上的元素则要引入快慢指针
二.思路引入
设置两个快慢指针,快指针走2步,慢指针走1步(不论快慢指针怎么走,如果链表带环则两指针一定能相遇,只不过当两指针走的步数差为1时,相遇所用时间最短),当两指针相遇,则链表带环
三.代码引入
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
bool hasCycle(struct ListNode *head) {
struct ListNode* slow, * fast;
slow = fast = head;
if(head == NULL || head->next == NULL)
return false;
while(fast && fast->next)
{
slow = slow->next;
fast = fast->next->next;
if(slow == fast)
return true;
}
return false;
}
最好用这么一种方法,方便后面判断环的入口