为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

湖上湖 2019-03-29 11:00:43
数据结构是这样的: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为null
2,扩展list_t,增加一个node_t*c_node。默认同head,每读一个向下走一个,直到null
                            
查看完整回答
反对 回复 2019-03-29
?
aluckdog

TA贡献1847条经验 获得超7个赞

intlist_iter(list_t*list,void**data_ptr)
{
staticnode_t*p=NULL;
staticintflag=0;
if(!flag){//pinittoheadnodewhenthefirsttime
p=list->head;
flag=1;
}
if(!p){
flag=0;
return0;
}
*data_ptr=p->data;
p=p->next;
return1;
}
                            
查看完整回答
反对 回复 2019-03-29
  • 2 回答
  • 0 关注
  • 365 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信