Coding练习-2.链表孤岛检测
使用快慢指针来检测单链表中是否存在孤岛/循环的存在
// 定义链表
struct ListNode
{
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL){}
};
void checkCircleLink(struct ListNode *head)
{
struct ListNode *p1 = head;
struct ListNode *p2 = head->next;
int cnt = 0;
while(1)
{
printf("[%d]%d,%d\n",cnt++,p1->val,p2->val);
if(p1!=NULL && p2!=NULL)
{
if(p1==p2 || p1==p2->next)
{
printf("true\n");
return;
}
}
else
{
printf("false\n");
return;
}
p1 = p1->next;// 1倍速度
p2 = p2->next->next;//2倍速度
}
}
struct ListNode * getLastNode(struct ListNode *head)
{
struct ListNode *p = head;
while(p->next!=NULL)
p=p->next;
return p;
}
void testcheckCircleLink()
{
struct ListNode *head=NULL;
for(int n=0;n<10;n++)
ListNode_pushback(&head,n);
struct ListNode *p=getLastNode(head);
p->next = head->next->next->next;
// 检查循环指针
checkCircleLink(head);
}