1 //双链表插入函数
2 //把一个新值插入到一个双链表中,rootp是一个指向根节点的指针
3 //value是需要插入的新值
4 //返回值:如果链表原先已经存在这个值,函数返回0
5 //如果为新值分配内存失败,函数返回-1
6 //如果新值成功地插入到链表中,函数返回1
7 #include<stdlib.h>
8 #include<stdio.h>
9 #include"doubly_liked_list_node.h"
10
11 int dll_insert(register Node *rootp,int value)
12 {
13 register Node *this;
14 register Node *Next;
15 register Node *newnode;
16 //查看value是否已经存在于链表中,如果是就返回
17 //否则,为新值创建一个新节点(“newnode"将指向它)
18 //"this"将指向应该在新节点之前的那个节点
19 //"next"将指向应该在新节点之后的那个节点
20
21 for(this=rootp;(next=this->fwd)!=NULL;this=next)
22 {
23 if(next->value==value)
24 return 0;
25 if(next->value>value)
26 break;
27 }
28 newnode=(Node *)malloc(sizeof(Node));
29 if(newnode==NULL)
30 return -1;
31 newnode->value=value;
32 //把新节点添加到链表中
33 newnode->fwd=next;
34 this->fwd=newnode;
35
36 if(this!=rootp)
37 newnode->bwd=this;
38 else
39 newnode->bwd=NULL;
40
41 if(next!=NULL)
42 next->bwd=newnode;
43 else
44 rootp->bwd=newnode;
45 return 1;
46 }