前言
环形链表问题的代码实现都很简单,但是背后的本质,也就是相关的数理问题,还是有一定难度的,面试官如果考察环形链表问题,一定会涉及到背后的数理问题,所以请读者多多重视。
1.环形链表一
1.1 解题方法:快慢指针
创建两个指针,快指针是慢指针移动速度的两倍。两个指针同时从链表的头节点开始移动,如果两个指针相遇了,证明有环,没相遇,就没环。
按照这个思路,代码如下
1.1.1 代码实现
typedef struct ListNode ListNode;
bool hasCycle(struct ListNode *head)
{
ListNode* slow = head;
ListNode* fast = head;
//快慢指针相遇时,证明有环
while(fast && fast->ne