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

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

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

C
HUX布斯 2023-04-14 22:18:38
数据结构是这样的: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}
查看完整描述

2 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

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

查看完整回答
反对 回复 2023-04-18
?
MYYA

TA贡献1868条经验 获得超4个赞

int list_iter(list_t *list, void **data_ptr){static node_t *p = NULL;static int flag = 0;if (!flag){ //p init to head node when the first timep = list->head;
flag = 1;
}if (!p){
flag = 0;return 0;
}
*data_ptr = p->data;
p = p->next;return 1;
}


查看完整回答
反对 回复 2023-04-18
  • 2 回答
  • 0 关注
  • 138 浏览

添加回答

举报

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