个人主页点这里~![](https://img-blog.csdnimg.cn/direct/0f686429e6aa4d818991cdc72ff4810c.png)
个人主页点这里~
1.给定一个链表,判断链表中是否有环
. - 力扣(LeetCode)点击做题!
题目:给定一个链表,判断链表中是否有环
题解:使用快慢指针
typedef struct ListNode ListNode;
bool hasCycle(struct ListNode *head)
{
ListNode* fast = head;
ListNode* slow = head;
while(fast && fast->next )
{
fast=fast->next->next;
slow=slow->next;
if(fast==slow)
{
return true;
}
}
return false;
}
因为只有在带环链表上,两者才会相遇,如果不带环,两者只会越来越远~
2.给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 NULL
. - 力扣(LeetCode)点击做题!
题目:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 NULL
题解:在上道题的基础上,增加一个meet指针,记录两指针相遇的位置
typedef struct ListNode ListNode;
struct ListNode* detectCycle(struct ListNode* head)
{
ListNode* fast = head;
ListNode* slow = head;
while (fast && fast->next)
{
fast = fast->next->next;
slow = slow->next;
if (fast == slow)
{
ListNode* meet = fast;
while (head != meet)
{
meet = meet->next;
head = head->next;
}
return meet;
}
}
return NULL;
}
本期分享到这里!