一.题目及剖析
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; }
最好用这么一种方法,方便后面判断环的入口