这是我的代码,我知道我写的不多,但我不知道如何初始化具有给定结构的双链表。
给定的结构(我不能更改其中的任何内容(
/* a node in the linked list */
typedef struct Node
{
void *data;
struct Node *next;
struct Node *prev;
} Node;
/* a linked list */
typedef struct LinkedList
{
Node *head;
Node *tail;
} LinkedList;
这是我的代码
/* create a new linked list */
/* returns a pointer to the newly created list */
/* print an error message and return NULL if an error occurs */
LinkedList *initialise_linked_list(void)
{
LinkedList *list;
list = (LinkedList *)malloc(sizeof(LinkedList));
if (list == 0)
{
fprintf(stderr, "Warning: Memory could not be allocated for the new created list.");
printf("n");
return 0;
}
return list;
}
您可以通过以下方式
LinkedList initialise_linked_list(void)
{
LinkedList list = { NULL, NULL };
return list;
}
并调用类似的函数
LinkedList list = initialise_linked_list();
另一种方法是以下
void initialise_linked_list( LinkedList *list )
{
list->head = NULL;
list->tail = NULL;
}
并称之为
LinkedList list;
initialise_linked_list( &list );
不需要动态地分配列表本身。列表中的节点将被动态分配。
至于你的函数,它不会初始化一个链表。它只是为结构分配内存。至少应该使用calloc
而不是malloc
。
例如
LinkedList * initialise_linked_list( void )
{
LinkedList *list = calloc( 1, sizeof( LinkedList ) );
if ( list == NULL )
{
fprintf(stderr, "Warning: Memory could not be allocated for the new created list.n");
}
return list;
}