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


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.


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