This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Question on tree-walking and mutually-recursive types


kenner@vlsi1.ultra.nyu.edu (Richard Kenner) writes:

>     How about the usual two-pointers collapsing loop algorithm to detect
>     the cycle?
>
> Sorry, I don't recognize this reference (and neither does Google).

Like this:

struct S { struct S *next; };

bool
detect_cycle(struct S *list)
{
    struct S *p, *q;
    bool advance_q = false;

    if (list == 0)
      return false;

    q = list;
    p = list->next;

    do
    {
        if (q == p)
            return true;

        if (advance_q)
            q = q->next;
        p = p->next;
        advance_q = !advance_q;
    }
    while (p);
    return false;
}

zw


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]