Leetcode在线编程linked-list-cycle
题目链接
题目描述
Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
题意
判断链表是否是循环链表
解题思路
快慢指针法,设置一个步长为2的指针,一个步长为1的指针,当2个指针重合的时候,证明这个链表是存在循环部分的。如果在中途遇到NULL,就证明这个链表本身是没有循环部分的。
AC代码
class Solution {
public:
bool hasCycle(ListNode *head) {
if(head==NULL || head->next ==NULL)
return false;
ListNode * p = head->next ,*q = head->next->next;
while(true)
{
if(q==NULL || q->next ==NULL)
return false;
else if(p==q)
return true;
else
{
p = p->next;
q = q->next ->next;
}
}
}
};