c-如何初始化具有以下结构的双链表



这是我的代码,我知道我写的不多,但我不知道如何初始化具有给定结构的双链表。

给定的结构(我不能更改其中的任何内容(

/* 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;
}

相关内容

  • 没有找到相关文章

最新更新