我正在重构一些C代码,并且因为一段时间我挂断了与链接列表数据结构有关的问题。请看看下面简单的代码片段:删除链接列表中的元素
Link apply(Link first, pred_ptr cond)
{
Link t=first->next,p=first;
do{
if(cond(t))
{
p->next=t->next;
free(t);
t=p;
}
p=t;
t=t->next;
}while(t!=first);
//Check the first
if(cond(first))
{
t=first->next;
free(first);
first=t;
p->next=t;
}
return first;
}
功能适用删除所有来自链表中的元素,其功能COND返回一个非零值。 链接是这样的:
struct node
{
struct node* next;
//Stuff
};
typedef struct node* Link
好了,我唯一的问题是关于如何所适用删除链表的第一个元素 - 第一 - ,看起来像额外的代码出来的循环是为了评估第一个元素所必需的,我没有能够把这个检查放在循环内没有额外的如果陈述,也许你可能知道如何从循环中删除额外的代码 - 如果可能 - 你会?
谢谢,
有一个愉快的一天。
谢谢,列表是循环的,一切正常,我唯一的担心是关于特定情况* cond(first)*的处理,但我怀疑为了可读性,我可能会保留代码,因为它是。 – fjanisze 2014-09-26 18:54:33