0

所以我想要做一个函数,给定一个节点,把它放在最后。问题是我想做一个适用于我所有列表结构的函数。我该怎么做呢?到目前为止,我设法制作了一个将节点放在最后但仅适用于一种列表的函数。这是代码:

void putList(PESPECIALIDADE *p){
    int i = 1;
    p->proximo = NULL;
     ptr;
    if(cabecaEspecialidade == NULL){
        p->id=1;
        cabecaEspecialidade = p;
    }
    else{
        for(ptr=cabecaEspecialidade; ptr->proximo != NULL; ptr = ptr->proximo){
            i++;
        }
        p->id=i+1;
        ptr->proximo = p;
        p->proximo=NULL;            
    }
}
4

1 回答 1

0

如果您想拥有许多不同内容的列表,一种常见的方法是使用一个公共节点结构作为所有列表的基础。

struct base_node
{
    struct base_node *next;
};

然后,您首先在用于列表的所有其他结构中拥有该结构:

struct some_node_data
{
    struct base_node node;  /* Note: not a pointer */

    /* All other data... */
};

(注意:将基节点结构作为新结构中的成员,这有点像 C++ 继承。)

现在您可以将指向上述结构的指针转换为指向该base_node结构的指针,并使用它。

void add_tail(struct base_node **head, struct base_node *node)
{
    /* Add `node` at the end of the list pointed to by `*head` */
}

/* ... */

struct some_node_data *some_data_head = NULL;

struct some_node_data *some_node = malloc(sizeof struct some_node_data);
add_tail((struct base_node *) &some_data_head, (struct base_node *) some_node);
于 2013-06-23T17:46:44.837 回答