Question on tree-walking and mutually-recursive types

Michael Matz matz@suse.de
Tue Jun 29 09:22:00 GMT 2004


Hi,

On Mon, 28 Jun 2004, Zack Weinberg wrote:

> 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;
> }

???  This tests if list_{2j+1} or list_{2j+2} equals list_j.  Hence it 
doesn't detect cycles.  Cf list == {1,2,3,1}


Ciao,
Michael.



More information about the Gcc mailing list