您的位置:首页 > 其它

链表--查看链表是否含有环(不一样的方法)

2015-11-02 14:57 381 查看
双指针法,一个快指针,一个慢指针,链表若有环的话,快指针必然会与慢指针相遇

<span style="font-size:18px;">typedef struct _node
{
int data;
struct _node *next;
}node,*pnode;</span>


int FindLoop(node *head)
{
node *p = NULL;
node *q = NULL;
if (head == NULL)
return 0;
p = head;
q = head->next;
while (p!=NULL &&
q!=NULL&&q->next!=NULL&&p!=q)
{
p = p->next;
q = q->next->next
}
if (p==q)
return 1;
else
return 0;
}


同样是使用快慢指针找到换的入口点

node *FindLoop(node *head)
{
node *pc = head;
node *pf = NULL;
if (!pc)
return NULL;
while (pc)
{
pf = head;
while(pf && pf != pc)
{
//当前结点的下一个结点是它前面的某个结点或者是它自己,则为循环处
if (pc->next == pf || pc->next == pc)
return pc->next;
pf = pf->next;
}
pc = pc->next;
}
return NULL;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: