- 方法1:
- 通过
返回值
返回所申请的头结点所在的内存空间首地址
,即创建双向链表
的头结点,代码如下: - 示例代码:
c
node_t *create_dplink_node_1(){
node_t *phead = (node_t *)malloc(sizeof(node_t));
if(NULL == phead){
printf("内存分配失败\n");
exit(-1);
}
phead->data = -1;
phead->front = NULL;
phead->next = NULL;
return phead;
}
- 注意事项:
- 1.分配完头结点的内存地址空间后,一定要检查
内存分配是否成功
; - 2.若头结点的内存分配失败,需要使用
shell命令exit(-1)退出
; - 3.双向链表的每个结点都有三个部分,即
前驱、元素、后继
(front、data、next
),而头结点的数据域可以不储存任何数据
,头结点的数据域
在此处,我将其被赋值-1
; - 4.头结点的
指针域(含前驱、后继)被赋值 NULL
,表示此时的双向链表只有一个头结点
; - 方法2:
- 使用
地址传参
的方法创建双向链表
的头结点,代码如下: - 示例代码:
c
int create_dplink_node_2(node_t **phead,int data){
if(NULL == phead){
printf("入参为NULL\n");
return -1;
}
*phead = (node_t *)malloc(sizeof(node_t));
if(NULL == *phead){
printf("内存分配失败\n");
return -1;
}
(*phead)->data = data;
(*phead)->front = NULL;
(*phead)->next = NULL;
return 0;
}
- 注意事项:
- 1.所传入的形参必须是
二级指针变量
,因为二级指针用来存储一级指针变量的地址
,即所申请的双向链表头结点在内存空间的地址
; - 2.形参传入到创建双向链表头结点的功能函数后,一定要做
入参合理性检查
; - 3.同方法1一样,分配完头结点的内存地址空间后,一定要检查
内存分配是否成功
; - 4.头结点的
数据域(即链表元素)被赋值 -1
; - 5.头结点的
指针域(含前驱、后继)被赋值 NULL
;