实际上,您不需要动态分配链表。您可以将它们放在全局(或静态)内存中,但必须手动初始化它们,这对于小列表是可行的(注意:初始化器值都是常量,或者至少在编译时是可计算的)。示例:
struct llist {
struct llist *next;
char *payload;
};
struct llist lists[] =
{{ lists+1, "one" }
,{ lists+2, "two" }
,{ lists+3, "three" }
,{ lists+4, "four" }
,{ lists+5, "five" }
,{ lists+6, "six" }
,{ lists+7, "seven" }
,{ lists+8, "eight" }
,{ lists+9, "nine" }
,{ NULL, "ten" }
};
struct llist *freelist = lists;
struct llist *queue = NULL;
struct llist *newnode (void)
{
struct llist *this ;
this = freelist;
if (this) freelist = this->next;
return this;
}
void freenode (struct llist *ptr)
{
if (!ptr) return;
ptr->next = freelist;
freelist= ptr;
}