判断单链表是有环的

构造一个循环单链表:
struct   Node
{
        DataType   data;
        Node   *next;
};
Node   a,   b,   c,   d;
a.next   =   &b;
b.next   =   &c;
c.next   =   &d;
d.next   =   &b;
========================================
判断单链表是否有环的公认效率最高的方案:
设2个指针,一个指针每次移动1步,另一个指针每次移动2步,如果2个指针相遇那么说明有环,如果有一个指针到NULL了就说明没有环:
int   is_link_list_cicled(Node*   head)
{
        Node   *p   =   head,   *q   =   head-> next;
        while(p   &&   q)
        {
                if(p   ==   q)
                        return   1;
                p   =   p-> next;
                q   =   q-> next;
                if(!q)
                        return   0;
                q   =   q-> next;
        }
        return   0;
}

©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页