单向链表如何实现一个迭代器函数

数据结构是这样的: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修饰的迭代节点指针不能很好的指示链表结束
湖上湖
浏览 366回答 2
2回答

一只名叫tom的猫

我认为两个方案1,在list_iter中每读出一个node销毁一个,直到某个node->next为null2,扩展list_t,增加一个node_t*c_node。默认同head,每读一个向下走一个,直到null

aluckdog

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;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript