数据结构是这样的:typedefstructnode{void*data;structnode*next;}node_t;typedefstructlist{node_t*head;}list_t;其中node_t结构是操作封装的.我想实现一个迭代器函数intlist_iter(list_t*,void*);当循环达到list结束的时候返回0,否则返回1也就是我可以这么使用iter:while(list_iter(list,&data)){//dosomething,suchasgetoutdata}我想封装这个函数,要用到static.但是static修饰的迭代节点指针不能很好的指示链表结束
2 回答
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
我认为两个方案1,在list_iter中每读出一个node销毁一个,直到某个node->next为null2,扩展list_t,增加一个node_t*c_node。默认同head,每读一个向下走一个,直到null
aluckdog
TA贡献1847条经验 获得超7个赞
intlist_iter(list_t*list,void**data_ptr){staticnode_t*p=NULL;staticintflag=0;if(!flag){//pinittoheadnodewhenthefirsttimep=list->head;flag=1;}if(!p){flag=0;return0;}*data_ptr=p->data;p=p->next;return1;}
添加回答
举报
0/150
提交
取消