#include < stdio.h > #include < malloc.h > #include < stdlib.h > #include < string .h > typedef struct node ... { struct node *prev; int value; struct node *next;} Node, * NodeList; /**/ /* * 链表为空时,初始化 * 非空时,插入操作 * 返回值: * 0 成功 * -1 参数为空 * -2 malloc失败 */ int InsertNode(NodeList * pNodeListHead, int value) ... { Node *n, *p; /**//*链表遍历用指针prev, next*/ Node *newNode; /**//*新节点指针*/ /**//*参数检查*/ if(NULL == pNodeListHead) return -1; /**//*为新节点分配空间*/ newNode = (Node*)malloc(sizeof(Node)); if(NULL == newNode) return -2; newNode->value = value; /**//*数据赋值*/ if(NULL == *pNodeListHead)/**//*空链表,初始化*/ ...{ newNode->prev = NULL; newNode->next = NULL; *pNodeListHead = newNode;/**//*重新设置头指针*/ } else ...{ p = (*pNodeListHead)->prev;/**//*设置p,n指针*/ n = *pNodeListHead; while( NULL != n ) ...{ if(n->value <= value)...{ /**//*当前项<value*/ p = n; /**//*记录前一项*/ n = n->next; } else break; } /**//*设置newNode的pre和next*/ newNode->prev = p; newNode->next = n; if(NULL == p)/**//*插在头部*/ *pNodeListHead = newNode;/**//*重新设置头指针*/ else if(NULL == n)/**//*插在尾部*/ p->next = newNode; else...{/**//*插在中部*/ p->next = newNode; n->prev = newNode; } } return 0; } /**/ /* * 返回值: * 0 成功 * -1 参数为空 */ int FreeNode(NodeList * pNodeListHead) ... { Node *p, *q; /**//*参数检查*/ if(NULL == pNodeListHead) return -1; /**//*空链表*/ if(NULL == *pNodeListHead) return 0; p = q = *pNodeListHead; while(p) ...{ q = p; p = p->next; free(q);/**//*释放当前节点*/ } *pNodeListHead = NULL; return 0;} /**/ /* * 返回值: * 0 成功 * -1 参数为空 */ int DeleteNode(NodeList * pNodeListHead, int value) ... { Node *n, *p; /**//*参数检查*/ if(NULL == pNodeListHead) return -1; /**//*空链表*/ if(NULL == *pNodeListHead) return 0; p = (*pNodeListHead)->prev; /**//*设置p,n指针*/ n = *pNodeListHead; while( NULL != n )/**//*链表遍历*/ ...{ if(n->value != value)...{ /**//*当前表项不符合,p和n向后移动*/ p = n; n = n->next; } else break; } if(NULL == p)/**//*第一项符合*/...{ *pNodeListHead = n->next; /**//*重新设置头指针*/ if(NULL != n->next) /**//*符合项后面非空*/ n->next->prev = NULL; free(n); } else if(NULL == n)/**//*无符合项目*/ return 0; else...{/**//*中间项符合*/ p->next = n->next; if(NULL != n->next) /**//*符合项后面非空*/ n->next->prev = p; free(n); } return 0;} void main( void ) ... { NodeList head = NULL; InsertNode(&head, 5); InsertNode(&head, 1); InsertNode(&head, 10); InsertNode(&head, 8); InsertNode(&head, 8); InsertNode(&head, 1); InsertNode(&head, 5); InsertNode(&head, 10); DeleteNode(&head, 8); DeleteNode(&head, 1); DeleteNode(&head, 5); DeleteNode(&head, 10); DeleteNode(&head, 6); DeleteNode(&head, 1); DeleteNode(&head, 10); DeleteNode(&head, 8); FreeNode(&head); DeleteNode(&head, 8);}