数据结构是这样的:

typedef struct node {     void *data;     struct node *next;  } node_t;  typedef struct list { 
   node_t *head; } list_t;

其中node_t 结构是操作封装的.

我想实现一个迭代器函数

int list_iter(list_t *,void *);

当循环达到list结束的时候返回0,否则返回1

也就是我可以这么使用iter:

while(list_iter(list,&data)){     //do something,such as get out data  }

我想封装这个函数, 要用到static .但是static修饰的迭代节点指针不能很好的指示链表结束

 

现在比较矛盾的是,遍历链表的指针p ,p必须是static,所以只能初始化为一个常量值 NULL.而p会在第一次调用iter函数的时候判断是不是NULL来给它初始化为head.但是p是不是NULL也是判断链表结束的标志.现在我觉得只 能加个flag来标志p是否被初始化过