代码实现
void dumpDoubListReverse(st_doubNode * head){
if(NULL == head){
return;
}
st_doubNode * p = NULL;
st_doubNode * tail = NULL;
tail = head;
while (NULL != tail->next){
tail = tail->next;
}
p = tail;
printf("========= dump DoubList Reverse %p ===========\n\t", p);
while(NULL != p){
printf(" %d ", p->data);
p = p->prev;
}
printf("\n");
printf("================================================\n");
}
/*
* 传入head是二重指针,是因为插入头结点的时候,会改变head的指向到新的节点
* 这里在PoS前面插入,注意这里的pos是按照数组方式来的,从0开始,所以12个插入,pos传11
*/
st_doubNode * insertDoubListNode(st_doubNode** phead, int pos, int data){
if(NULL == phead || pos < 0){
printf("%s: param error\n",__func__);
return NULL;
}
st_doubNode * head = *phead;
st_doubNode * p = NULL;
st_doubNode * prev = NULL;
st_doubNode * nw = NULL;
nw = (st_doubNode *) malloc(sizeof(st_doubNode));
if(NULL == nw){
printf("%s: memory alloc failed\n", __func__);
return NULL;
}
nw->data = data;
nw->prev = NULL;
nw->next = NULL;
if(0 == pos){ // 首节点
head->prev = nw;
nw->next = head;
*phead = nw; /*插入后更新首节点的值*/
} else { // 中间节点
p = findDoubListPos(head, pos);
prev = p->prev;
prev->next = nw;
nw->prev = prev;
nw->next = p;
p->prev = nw;
}
return nw;
}
void testInsertDoubNode(void){
st_doubNode * nw = NULL;
printf("\n************ testInsertDoubNode************ \n");
nw = insertDoubListNode(&gDoubHead, 0, 70);
dumpDoubList(gDoubHead);
insertDoubListNode(&gDoubHead, 5, 31);
dumpDoubList(gDoubHead);
insertDoubListNode(&gDoubHead, 11, 66);
dumpDoubList(gDoubHead);
dumpDoubListReverse(gDoubHead);
return;
}
调试编译
gcc listMain.c doublist.c -o a.exe -DDEBUG
调试输出
************ testCreateDoubList ************
========= Dump Double List 0x1074010 ===========
22 32 19 53 0 47 29 116 4 6
===================================
************ testCreateDoubList ************
len = 10
************ testInsertDoubNode************
========= Dump Double List 0x1074150 ===========
70 22 32 19 53 0 47 29 116 4 6
===================================
========= Dump Double List 0x1074150 ===========
70 22 32 19 53 31 0 47 29 116 4 6
===================================
========= Dump Double List 0x1074150 ===========
70 22 32 19 53 31 0 47 29 116 4 66 6
===================================
========= dump DoubList Reverse 0x1074130 ===========
6 66 4 116 29 47 0 31 53 19 32 22 70
================================================