- 实例要求:
- 给定一个
链表的头节点 head
,判断链表中是否有环
; - 如果链表中
存在环
,则返回 true
,否则返回 false; - 实例分析:
- 1、定义
两个指针temp1和temp2
,指针temp1每次只移动一步
,而指针temp2每次移动两步
; - 2、初始化两个指针,指针temp1在
位置 head
,而指针temp2在位置 head->next
; - 3、在移动的过程中,指针temp2反过来追上指针temp1,就说明该链表为
环形链表
; - 示例代码:
c
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
bool hasCycle(struct ListNode *head)
{
if(NULL == head || NULL == head->next)
{
return false;
}
struct ListNode* temp1 = head;
struct ListNode* temp2 = head->next;
while(temp1 != temp2)
{
if(NULL == temp2 || NULL == temp2->next)
{
return false;
}
temp1 = temp1->next;
temp2 = temp2->next->next;
}
return true;
}
- 注意:
NULL == head
:入参合理性检查;NULL == head->next
:只有一个头结点;