我正在做一个学校项目,我试图更好地理解双向链表和结构。目前,我正在尝试实现一个函数,一个创建新链表的函数。因为我认为我可以从那里工作。
typedef struct ListItem {
struct ListItem *previousItem; //pointer to previous item, NULL if first list item
struct ListItem *nextItem; //pointer to next item, NULL if first list item
void *data; //pointer to data
这是我正在尝试制作的双向链表的结构。我知道“void *”可以保存指向任何东西的指针,而且我必须分配存储在列表项中的任何数据。
/**
* This function starts a new linked list. Given an allocated pointer to data it will return a
* pointer for a malloc()ed ListItem struct. If malloc() fails for any reason, then this function
* returns NULL otherwise it should return a pointer to this new list item. data can be NULL.
*
* @param data The data to be stored in the first ListItem in this new list. Can be any valid
* pointer value.
* @return A pointer to the malloc()'d ListItem. May be NULL if an error occured.
*/
ListItem *NewList(void *data);
我知道 malloc() 在堆栈上分配了足够的内存供使用,所以我认为在我的函数中我必须 malloc() *previousItem、*nextItem 和 *data(这将是 6 个字节?)除此之外,实现该功能我要做的就是复制 ListItem 结构?上一个和下一个项目将是 NULL 指针,因为它是列表中的唯一项目,而 *data 将是我认为的输入。谁能告诉我我的代码是什么样的?