- 论坛徽章:
- 11
|
本帖最后由 zylthinking 于 2013-01-11 13:44 编辑
pmerofc 发表于 2013-01-10 20:39
回复 1# pprpg
我大乐, 将 for 改成 while 就自以为牛了, 还自以为少了一个中间变量而自鸣得意???
1. 首先, linus 批判的是不使用双重指针而只能在代码内使用变量记住前一个元素地址的代码, 因此, 所有本质上和linus 思路一致的都别舔着脸自以为是;
2. 代码改的也是 bug 侧漏, 至少与 linus 原来代码不一致; 看来经过了这么久, 专家的编码水平还是原地踏步
还想着给人解毒呢??? 你就不能不被人揪小辫子么
防止专家改代码, 及方便比较, 作个备份, 专家代码- void remove_if(node ** head, remove_fn rm)
- {
- node * entry ;
- while( (entry = *head)!=NULL )
- {
- if (rm(entry))
- {
- *head = entry->next;
- free(entry);
- }
- else
- head= &entry->next;
- }
- }
复制代码 linus 原来代码:
- void remove_if(node ** head, remove_fn rm)
- {
- for (node** curr = head; *curr; )
- {
- node * entry = *curr;
- if (rm(entry))
- {
- *curr = entry->next;
- free(entry);
- }
- else
- curr = &entry->next;
- }
- }
复制代码 日了日了, 是我搞错了, 被抓住小辫子了 |
|