代码实现
void dumpDoubList(st_doubNode * head){
if(NULL == head){
return;
}
st_doubNode * p = NULL;
printf("========= Dump Double List %p ===========\n\t", head);
p = head;
while (NULL != p){
printf(" %d ", p->data);
p = p->next;
}
printf("\n");
printf("===================================\n");
}
int createDoubList(st_doubNode ** phead, int * array, int size){
if(NULL == array || size < 0){
printf("%s: param error\n",__func__);
return PARAM_ERR;
}
if(0 == size){ /*没有数据,初始化个毛线*/
return;
}
st_doubNode * head = * phead;
st_doubNode * p = NULL, *q = NULL;
int i = 0;
/*分配并初始化头结点*/
head = (st_doubNode * ) malloc (sizeof(st_doubNode));
if(NULL == head){
printf("%s: malloc error\n",__func__);
return ALLOC_ERR;
}
head->next = NULL;
head->prev = NULL;
p = head;
for(i = 0; i < size; i++){
/*首节点,未赋值*/
if(NULL == head->next){
p->data = array[i];
/*这个做个小技巧,把next指向头自己,表示已经赋值了*/
p->next = head;
} else {
q = (st_doubNode * ) malloc (sizeof(st_doubNode));
if(NULL == q){
printf("%s: malloc error\n", __func__);
return ALLOC_ERR;
}
q->data = array[i];
q->prev = p;
q->next = NULL;
p->next = q;
p = q;
}
}
*phead = head;
return SUCCESS;
}
void testCreateDoubList(void){
/*初始化input数据*/
int input[10] = {22,32,19,53,0,47,29,116,4,6};
gDoubHead = NULL;
printf("************ testCreateDoubList ************ \n");
createDoubList(&gDoubHead, input, 10);
dumpDoubList(gDoubHead);
return;
}
调试编译
gcc doublist.c listMain.c -DDEBUG -o a.exe
调试输出
************ testCreateDoubList ************
========= Dump Double List 0x1b65010 ===========
22 32 19 53 0 47 29 116 4 6
===================================